@Controller + @ResponseBody = @RestController

举报
AAAI 发表于 2021/05/25 22:52:48 2021/05/25
【摘要】 @Controller + @ResponseBody = @RestController 简单的理解: 如果类上标注@Controller 且方法上没有标注@ResponseBody的话 return的值会被视图解析器处理。 如果类上标注的是@RestController的话,或者在方法上标注了@ResponseBody的话,返回值就不会被视图解析器处理...

@Controller + @ResponseBody = @RestController

简单的理解:

如果类上标注@Controller 且方法上没有标注@ResponseBody的话 return的值会被视图解析器处理。

如果类上标注的是@RestController的话,或者在方法上标注了@ResponseBody的话,返回值就不会被视图解析器处理。

复杂理解:

@Controller

使用@Controller 注解,注解标注类的方法,return时会被视图处理器识别成静态文件的路径。

@ResponseBody

@ResponseBody 将方法的返回值,以特定的格式写入到response的body区域 [HTTP response body],进而将数据返回给客户端。
当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。当它标注类时,类中所有方法的返回值都将直接返回值到页面,相当于给所有的类都加上@ResponseBody注解。

如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。

使用位置:一般在异步获取数据时使用[也就是AJAX],在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入HTTP response body 中。

举例:比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。

好处是:

  1. GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。
  2. POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。
    @ResponseBody可以标注任何对象,由Spring完成对象——协议的转换。

坏处是:返回之前,若前端编码格式不一致,很容易导致乱码。

@RestController

@RestController注解相当于@ResponseBody + @Controller合在一起的作用,只能注解类。

使用@RestController这个注解,直接写入HTTP相应体返回到页面中。
此时 return “xx”,只会返回"xx"的内容。因为@RestController中相当于已经有了@RessponseBody的注解效果,它会以json字符串的形式返回给客户端。

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/117249332

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。