SpringBoot(二):WEB篇


  上篇文章介绍了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强调的是自然模板,也就是允许模板作为产品原型使用(即可在浏览器直接打开,便于前端书写调试,在作为视图来使用时,动态的替换其中的部分数据内容)。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM