赞
踩
本篇文章主要记载作者本人在学习Spring4.x时所遇到的一些问题,仅供学习参考。
之前在使用Spring时,在controller层的编写过程中遇到过将ResponseBody遗忘的情形,这导致了运行时的404错误,经过baidu,才知道是因为controller层要配合model模版进行响应,当controller层不使用ResponseBody注解时,返回结果无法直接写入HTTP response body中,controller层所做的结果被解析为跳转路径,由于路径不存在,自然会出现404错误。而使用了ResponseBody注解后,返回结果会自动写入HTTP response body中,从而完成页面的结果的显示。
所以在之前使用时RequestMapping与ResponseBody是一起使用的,今天在学习SpringBoot时发现了一个RestControlle注解,之前未曾接触过,应该是自己孤陋寡闻了,看到书上说RestControlle注解可以代替RequestMapping与ResponseBody,具体的示例如下:
使用了Controlle注解的结果如下:
@RequestMapping("/login")
@ResponseBody
public User login(User user){
return user;
}
那么在前台接收到的数据为:'{"userName":"xxx","password":"xxx"}'
使用了RestController注解的结果如下:
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
response.getWriter.write(JSONObject.fromObject(user).toString());
}
所以只要你的项目支持Spring4.x,并且需要哪个方法返回json数据格式,就可以将项目中的Controller换成RestController并把每个处理器方法上的ResponseBody注解去掉,两种注解方式的区别在于:
@ResponseBody,一般是使用在单独的方法上的,需要哪个方法返回json数据格式,就在哪个方法上使用,具有针对性。
@RestController,一般是使用在类上的,它表示的意思其实就是结合了@Controller和@ResponseBody两个注解,如果哪个类下的所有方法需要返回json数据格式的,就在哪个类上使用该注解,具有统一性;需要注意的是,使用了@RestController注解之后,其本质相当于在该类的所有方法上都统一使用了@ResponseBody注解,所以该类下的所有方法都会返回json数据格式,输出在页面上,而不会再返回视图。
至于各自有什么好处,因为还没探索到,所以还不了解,如果有了解的大佬希望不吝赐教。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。