@Controller + @ResponseBody = @RestController
@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 数据。
好处是:
- GET模式下,这里使用了@PathVariable绑定输入参数,非常适合Restful风格。因为隐藏了参数与路径的关系,可以提升网站的安全性,静态化页面,降低恶意攻击风险。
- 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
- 点赞
- 收藏
- 关注作者
评论(0)