@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 数据。

好处是:

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

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

@RestController

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

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值