上篇文章介绍了Spring Boot的部分特性:SpringBoot(二):入门篇,讲解了SpringBoot的启动类、配置文件、日志、多环境等
本章及后续几章将基于此 搭建一个完整可供日常使用的WEB开发框架(有些未必是SpringBoot体系栈的功能,但是在日常开发中都会普遍使用到)
WEB层
JSON接口
在SpringBoot中,开发web程序非常简单,在第一章《SpringBoot(一):初章》中我们已经搭建了一个JSON接口的开发
即只需要类上添加@RestController注解,默认类中的所有方法都会以JSON的格式返回(大家可以参考第一章,@RestController其实就是@Controller和@ResponseBody注解的组合)(@RestController其实并不是SpringBoot的专属注解,在传统Spring项目中我们依旧可以使用)
三种方式效果是等同的
@RestController
public class DemoController {
@RequestMapping("/login")
public User login(User user) {
return user;
}
}
@Controller
public class DemoController {
@RequestMapping("/login")
@ResponseBody
public User login(User user) {
return user;
}
}
@Controller
public class DemoController {
@RequestMapping("/login")
public void login(User user, HttpServletResponse response) {
response.getWriter.write(JSONObject.fromObject(user).toString());
}
}
JSON接口(FastJSON)
@ResponseBody注解默认只支持Jackson或者GSON的,有意的同学可以查看RequestMappingHandlerAdapter类下的构造方法
那么我们如果想让FastJson处理我们的转换,应该如何配置呢?下面贴上代码
首先,导入FastJson的依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.46</version> </dependency>
配置方式1,继承WebMvcConfigurerAdapter并且重写 configureMessageConverters(List<HttpMessageConvert<?>> converts)方法
@SpringBootApplication public class WebApplication extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { super.configureMessageConverters(converters); // 1.定义一个convert转换消息的对象 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); // 2.添加FastJson的配置信息 FastJsonConfig config = new FastJsonConfig(); // 3.在convert中添加配置信息 config.setSerializerFeatures( SerializerFeature.PrettyFormat ); fastJsonHttpMessageConverter.setFastJsonConfig(config); // 4.将convert添加到converts中 converters.add(fastJsonHttpMessageConverter); } public static void main(String[] args) { SpringApplication.run(WebApplication.class, args); } }
配置方式2,使用@Bean注解返回一个HttpMessageConverts对象
@SpringBootApplication public class WebApplication { @Bean public HttpMessageConverters converter() { // 1.定义一个convert转换消息的对象 FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); // 2.添加FastJson的配置信息 FastJsonConfig config = new FastJsonConfig(); // 3.在convert中添加配置信息 config.setSerializerFeatures( SerializerFeature.PrettyFormat ); fastJsonHttpMessageConverter.setFastJsonConfig(config); // 4.将convert转换为HttpMessageConverters并且添加注册到Spring容器中 return new HttpMessageConverters(fastJsonHttpMessageConverter); } public static void main(String[] args) { SpringApplication.run(WebApplication.class, args); } }
Spring Boot 2.0的WebFlux(目前简单了解即可)
什么是Spring WebFlux?它是一种异步的、非阻塞的、支持背压(Back pressure)机制的Web开发框架。
PS:Spring Web MVC 是基于Servlet API和Servlet容器设计的,Spring WebFlux是基于Reactive Streams API和Servlet3.1+容器设计的
要深入了解Spring的WebFlux,首先要知道Reactive Stream(响应式编程),具体可以参加知乎专栏的《响应式编程(Reactive Programming)介绍》
相比函数式编程而言,它只是另外一种编程姿势而已,就好像不论是从前面还是从后面,目的地都是一样的,姿势不同而已
函数式编程:函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)
响应式编程:响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
(举例:在非响应式编程中,a = b + c; 标识将b+c的结果赋给a,之后改变b或c的值不会影响到a,但在响应式编程中,a的值是会随着b和c的更新而更新的)
WebFlux支持两种编程风格
1. 使用@Controller注解,与传统Spring项目或者SpringBoot2.0版本之前的项目相同
2. 使用Java 8 lambda的函数式编程风格
TIP:目前,响应式编程不支持MySQL并且不支持MySQL的事务,所以对于WebFlux目前暂时不多阐述
Thymeleaf的使用
在Java世界的MVC框架中,可供使用的视图技术有很多:JSP(它并不是模板引擎)、Thymeleaf、Freemark、Velocity。其中Thymeleaf是SpringBoot官网推荐的一款优秀的模板引擎,它在HTML5/XHTML的视图层表现的很好,在一定程度上,它是可以完全替代JSP+JSTL的。Thymeleaf强调的是自然模板,也就是允许模板作为产品原型使用(即可在浏览器直接打开,便于前端书写调试,在作为视图来使用时,动态的替换其中的部分数据内容)。