今天重新复习了下springboot的自动配置原理,根据springboot在maven的pom.xml文件下添加以下依赖就可以引入thymeleaf
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
但是同时也需要thymeleaf和thymeleaf-layout-dialect的版本相匹配,thymeleaf 3.x的版本需要thymeleaf-layout-dialect 2.x的版本以上适配。
所以注意在<properties中添加下版本
<properties>
<java.version>1.8</java.version>
<thymeleaf.version>3.0.11.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.4.1</thymeleaf-layout-dialect.version>
</properties>
然后运行springboot启动类,在浏览器输入请求路径,发现没有成功渲染,代码如下
//@ResponseBody
//@Controller
@RestController
public class HelloWorldController {
@RequestMapping("/hello")
public String hello() {
return "hello world!";
}
@RequestMapping("/success")
public String success() {
return "success";
}
}
原因就是RestController = Controller +ResponseBody
而@ResponseBody是ResponseBody的作用其实是将java对象转为json格式的数据。
@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据。
注意:在使用此注解之后不会再走视图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据。
@ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。
注意:在使用 @RequestMapping后,返回值通常解析为跳转路径,但是加上 @ResponseBody 后返回结果不会被解析为跳转路径,而是直接写入 HTTP response body 中。 比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。@RequestBody 将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
版权声明:本文为CSDN博主「originations」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/originations/article/details/89492884
总的来说就是@ResponseBody它是作用在方法上并且不回再走视图解析器,直接将数据转为json或者xml数据写入http response body中返回给浏览器。
而Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎的Thymeleaf主要作用是把model中的数据渲染到html中,因此其语法主要是如何解析model中的数据。因此它得不到用@responsebody注解的方法里返回的数据。
改成如下代码:
package com.atguigu.springboot_demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author liuhaoqi
* @Date 2020/3/10 15:30
* @Version 1.0
*/
//这个类的所有方法返回的数据直接写给浏览器,(如果是对象 还能转为json数据)
//@ResponseBody
//@Controller
@Controller
public class HelloWorldController {
@ResponseBody
@RequestMapping("/hello")
public String hello() {
return "hello world!";
}
@RequestMapping("/success")
public String success() {
return "success";
}
}