Spring Boot第五弹,WEB开发初了解~

持续原创输出,点击上方蓝字关注我吧

目录

  • 前言
  • Spring Boot 版本
  • 前提条件(必须注意)
  • 添加依赖
  • 第一个接口开发
    • 如何自定义tomcat的端口?
    • 如何自定义项目路径?
  • JSON格式化
    • 日期格式的设置
    • 其余属性的配置
    • 如何在配置类配置?
  • 总结

前言

今天是Spring Boot专栏的第五篇文章,相信你们看了前四篇文章对Spring Boot已经有了初步的了解,今天这篇文章就来介绍一下Spring Boot的重要功能WEB开发。web

Spring Boot 版本

本文基于的Spring Boot的版本是2.3.4.RELEASEspring

前提条件(必须注意)

Spring Boot的WEB开发有本身的启动器和自动配置,最好采用Spring Boot的一套配置,这里千万不要在任何一个配置类上添加@EnableWebMvc这个注解,具体缘由会单独一篇文章讲述。后端

此篇文章全部的内容都是在没有标注@EnableWebMvc这个注解的前提下。tomcat

添加依赖

Spring Boot对web模块有一个启动器,只须要在pom.xml中引入便可,以下:springboot

<dependency>
 <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId> </dependency> 

这个依赖看似只是引入了一个依赖,其实内部引入了Spring,Spring MVC的相关依赖,Spring Boot的启动器就是这么神奇,后面的文章会介绍启动器的原理和如何自定义启动器。app

第一个接口开发

假设这么一个需求,须要根据用户的ID获取用户信息,咱们应该如何写接口呢?前后端分离

其实和Spring MVC开发步骤同样,写一个controller,各类注解骚操做搞起,以下:koa

@RestController
@RequestMapping("/user") public class UserController {  @GetMapping("/{id}")  public Object getById(@PathVariable("id") String id){  return User.builder()  .id(id)  .name("不才陈某")  .age(18)  .birthday(new Date())  .build();  } } 

这样一个接口就已经完成了,启动项目访问http://localhost:8080/user/1便可获得以下的结果:编辑器

{
"id": 1, "age": 18, "birthday": 1601454650860, "name": "不才陈某" } 

如何自定义tomcat的端口?

Spring Boot其实默认内嵌了Tomcat,固然默认的端口号也是8080,若是须要修改的话,只须要在配置文件中添加以下一行配置便可:spring-boot

server.port=9090

如何自定义项目路径?

在配置文件中添加以下配置便可:

server.servlet.context-path=/springboot01

以上的端口和项目路径改了以后,只须要访问http://localhost:9090/springboot01/user/1便可。

JSON格式化

在先后端分离的项目中大部分的接口基本都是返回JSON字符串,所以对返回的JSON也是须要定制一下,好比日期的格式NULL值是否返回等等内容。

Spring Boot默认是使用Jackson对返回结果进行处理,在引入WEB启动器的时候会引入相关的依赖,以下图:

一样是引入了一个启动器,则意味着咱们既能够在配置文件中修改配置,也能够在配置类中重写其中的配置。JackSon的自动配置类是JacksonAutoConfiguration

日期格式的设置

上面的例子中日期的返回结果实际上是一个时间戳,那么咱们须要返回格式为yyyy-MM-dd HH:mm:ss

能够在配置文件application.properties中设置指定的格式,这属于全局配置,以下:

spring.jackson.date-format= yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone= GMT+8

也能够在实体属性中标注@JsonFormat这个注解,属于局部配置,会覆盖全局配置,以下:

@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone = "GMT+8")
 private Date birthday; 

上述日期格式配置完成以后返回的就是指定格式的日期,以下:

{
"id": "1", "age": 18, "birthday": "2020-09-30 17:21", "name": "不才陈某" } 

其余属性的配置

Jackson还有不少的属性能够配置,这里就再也不一一介绍了,全部的配置前缀都是spring.jackson

如何在配置类配置?

前面说过在引入WEB模块的时候还引入了JackSon的启动器,这是个好东西,这也是Spring Boot的好处之一,自动配置类中所需的一些配置既能够在全局配置文件application.properties中配置也能够在配置类中从新注入某个Bean而达到修改默认配置的效果。

在JackSon自动配置类JacksonAutoConfiguration中有以下一段代码:

@Bean
 @Primary  @ConditionalOnMissingBean  ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {  return builder.createXmlMapper(false).build();  } 

这一段代码可能初学者比较懵逼了,什么意思呢?别着急,@Bean这个注解无非就是注入一个Bean到IOC容器中,@Primary这个注解自不用说了,剩下的就是@ConditionalOnMissingBean这个注解了,什么意思呢?

其实仔细研究过Spring Boot的源码的朋友都知道,相似这种@Conditionalxxx的注解还有不少,这里就再也不深刻讲了,后期的文章会介绍。

@ConditionalOnMissingBean这个注解的意思很简单,就是当IOC容器中没有指定Bean的时候才会注入,言下之意就是当容器中不存在ObjectMapper这个Bean会使用这里生成的,相似于一种生效的条件。

言外之意就是只须要自定义一个ObjectMapper而后注入到IOC容器中,那么这个自动配置类JacksonAutoConfiguration中注入的将会失效,也就达到了覆盖的做用了。

所以只须要定义一个配置类,注入ObjectMapper便可,以下:

/**  * 自定义jackson序列化与反序列规则,增长相关格式(全局配置)  */ @Configuration public class JacksonConfig {  @Bean  @Primary  public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {  builder.locale(Locale.CHINA);  builder.timeZone(TimeZone.getTimeZone(ZoneId.systemDefault()));  builder.simpleDateFormat(DatePattern.NORM_DATETIME_PATTERN);  builder.modules(new CustomTimeModule());   ObjectMapper objectMapper = builder.createXmlMapper(false).build();   objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);   //遇到未知属性的时候抛出异常,//为true 会抛出异常  objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);  // 容许出现特殊字符和转义符  objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true);  // 容许出现单引号  objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);    objectMapper.registerModule(new CustomTimeModule());   return objectMapper;  }  } 

上面只是个例子,关于ObjectMapper中的一些内容感兴趣的能够本身查查相关资料。

总结

这篇文章算是WEB开发的入门,介绍了如何定义接口,返回JSON如何定制等内容,若是以为有所收获点点关注在看分享一波!!!

做者的上个Mybatis专栏已经结束了,做者特地将所有文章整理成册,回复关键词Mybatis进阶便可领取此册。

相关文章
相关标签/搜索