thymeleaf 跟 JSP 一样,就是运行之后,就得到纯 HTML了。 区别在与,不运行之前, thymeleaf 也是 纯 html ...
所以 thymeleaf 不需要 服务端的支持,就能够被以 html 的方式打开,这样就方便前端人员独立设计与调试, jsp 就不行了, 不启动服务器 jsp 都没法运行出结果来
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
注意这里方法名必须跟路径一样,这个方法返回的 "hello"即templates目录下的hello.html,根据properties配置文件规则去匹配
并且带上数据"name",值为"luckey"
@RequestMapping("/hello/thymeleaf") public String thymeleaf(Model model) { model.addAttribute("name", "luckey"); return "hello"; }
hello.html 做了如下事情:
1. 声明当前文件是 thymeleaf, 里面可以用th开头的属性
<html xmlns:th="http://www.thymeleaf.org">
2.把 name 的值显示在当前 p里,用的是th开头的属性: th:text, 而取值用的是 "${name}" 这种写法叫做 ognl,通过这种方式,把服务端的数据显示在当前html里
3.字符串拼写。 两种方式,一种是用加号,一种是在前后放上 ||.
<p th:text="'hello:'+${name}" ></p>
<p th:text="|hello: ${name}|" ></p>
<!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>hello</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <p th:text="'hello:'+${name}" >name</p> </body> </html>
#thymeleaf spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.cache=false spring.thymeleaf.content-type=text/html spring.thymeleaf.enabled=true spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.mode=HTML5
一般服务端返回给页面是json格式,常见是封装一个返回实体类,如下结构所示:
{ "code":0 "msg":"success" "data": object }
这种方式并不是很好,具体是每次返回都需要new 一个新的类,且code和msg硬编码,可以考虑把code,msg继续封装成一个对象.
@Setter @Getter public class Result<T> { private int code; private String msg; // 成功时返回的data数据 private T data; /** * 成功时候的调用 * */ public static <T> Result<T> success(T data){ return new Result<T>(data); } /** * 失败时候的调用 * */ public static <T> Result<T> error(CodeMsg codeMsg){ return new Result<T>(codeMsg); } private Result(T data) { this.data = data; this.code = 0; this.msg = "success"; } private Result(CodeMsg codeMsg) { if(codeMsg != null) { this.code = codeMsg.getCode(); this.msg = codeMsg.getMsg(); } } }
@Getter @Setter public class CodeMsg { public static final CodeMsg SUCCESS = new CodeMsg(0,"success"); public static final CodeMsg SERVER_ERROR = new CodeMsg(500100,"服务端异常"); private int code; private String msg; private CodeMsg(int code, String msg) { this.code = code; this.msg = msg; } }
这样我们接口方法返回时可以统一为 Result.success() 或者Result.err().代码更加简洁优雅.
@RequestMapping("/hello") @ResponseBody public Result<String> hello(){ return Result.success("hello,world."); } @RequestMapping("/helloError") @ResponseBody public Result<CodeMsg> helloError(){ return Result.error(CodeMsg.SERVER_ERROR); }
页面返回结果: