测试所用html:
起初是注意到教程中,在简单返回一个字符串的页面上使用@restcontroller,而在thymeleaf的页面中用@controller
于是去看它的源码:
发现就是相当于多了一个@responseBody
而@responseBody有博客说过了:“@ResponseBody作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML。”
经过一些尝试之后,我认为它的作用可以初步的理解为一个toString方法:
如果我们使用了此注解
那么结果就是返回值转化成一个文本写入body的结果,在这里就是
如果返回的是一个自定义的对象:
@RequestMapping("/login")
@ResponseBody
public User login(User user){
return user;
}
/**
user的内容:userName,pwd
*/
那么结果就会是’{“userName”:“xxx”,“pwd”:“xxx”}'这样一个json格式
它等价于
@RequestMapping("/login")
public void login(User user, HttpServletResponse response){
response.getWriter.write(JSONObject.fromObject(user).toString());
}
于是我们可以定性的理解为,这个注解就是将返回值通过适当的转化变成了一串字面值
在上面list的例子中,如果不加@responseBody,就会得到这样的结果:
这就意味着返回的字符串“list”指向了list.html,且thymeleaf的元素没有起作用——即静态访问了这个html
而在返回一个ModelAndView对象时,加不加此注解展示的效果似乎是一样的,个人理解是此对象中在返回之前就加载完了需要的数据,而经过注解之后的结果与直接传递恰好相同,不能认为它没有影响,否则就会在上文那样需要传递html时出错
参考:
https://blog.youkuaiyun.com/qq_43648927/article/details/105235801
……乐了,放了一个看的简书的参考链接,然后被提示外链过多 真行,一点都不让给别人引流是吧