以下是自己经过查询各种文档得出的结论,如有不对请指正。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。举个栗子:
@RequestMapping(path = "/hello", method = RequestMethod.POST)
@ResponseBody
public String helloWorld() {
return "Hello Simon"
}
上面的代码结果是文本 Hello Simon将被写入HTTP的响应流中。
效果等同于如下代码:
@RequestMapping("/hello")
public void helloWorld(HttpServletResponse response){
response.getWriter.write("Hello Simon");
}
注:Spring MVC的 @ResponseBody方法是有风险的,因为它会根据客户的请求-包括URL的路径后缀,来渲染不同的内容类型。因此,禁用后缀模式匹配或者禁用仅为内容协商开启的路径文件后缀名携带,都是防范RFD攻击的有效方式。