@ResponseBody 作用新体验
问题描述:
最近在学习Spingmvc的相关知识,在写控制器上类中的处理方法的时候,我发现我的方法只要写了void类型,前端请求在被处理后,服务器会报500的错误。所以我在想,难道控制器中的处理方法必须得有返回值吗?
答案:当然不是,接下来我用图文解释。
1.这是我写的控制器处理方法:
@Controller
@RequestMapping("/fruit")
public class FruitController {
@RequestMapping("/fruit01")
public void fruit01(@RequestParam(value = "fname") List< String> fnameList){
fnameList.forEach(System.out::println);
}
}
请求处理完成会报错如下:
2.改进后的控制器处理方法:
@Controller
@RequestMapping("/fruit")
@ResponseBody
public class FruitController {
@RequestMapping("/fruit01")
public void fruit01(@RequestParam(value = "fname") List< String> fnameList){
fnameList.forEach(System.out::println);
}
}
是的,加了@ResponseBody注解后就不报错了。听我解释:
在不加@ResponseBody注解之前,springmvc默认你返回的就是一个页面。
而加@ResponseBody注解之后,默认返回的是字符串和json数据。字符串可以为空,页面当然不可以为空。因为它在返回页面的时候本质也会做字符拼接返回一个地址,这是内部服务器转发的过程。什么也不返回它怎么转发。