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進階便可領取此冊。

相關文章
相關標籤/搜索