1. 程式人生 > >jackson學習之十(終篇):springboot整合(配置類)

jackson學習之十(終篇):springboot整合(配置類)

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 系列文章彙總 - [jackson學習之一:基本資訊](https://blog.csdn.net/boling_cavalry/article/details/107135958) - [jackson學習之二:jackson-core](https://blog.csdn.net/boling_cavalry/article/details/108571629) - [jackson學習之三:常用API操作](https://blog.csdn.net/boling_cavalry/article/details/108192174) - [jackson學習之四:WRAP_ROOT_VALUE(root物件)](https://blog.csdn.net/boling_cavalry/article/details/108298858) - [jackson學習之五:JsonInclude註解](https://blog.csdn.net/boling_cavalry/article/details/108412558) - [jackson學習之六:常用類註解](https://blog.csdn.net/boling_cavalry/article/details/108333324) - [jackson學習之七:常用Field註解](https://blog.csdn.net/boling_cavalry/article/details/108589494) - [jackson學習之八:常用方法註解](https://blog.csdn.net/boling_cavalry/article/details/108433330) - [jackson學習之九:springboot整合(配置檔案)](https://blog.csdn.net/boling_cavalry/article/details/108460433) - [jackson學習之十(終篇):springboot整合(配置類)](https://blog.csdn.net/boling_cavalry/article/details/108559056) ### 本篇概覽 - 本文是《jackson學習》系列的終篇,經過前面的一系列實戰,相信您已可以熟練使用jackson靈活的執行各種json序列化和反序列化操作,那麼,本篇就以輕鬆的方式來完成整個系列吧; - 上一篇介紹的是在springboot中通過配置檔案對jackson做設定,今天要聊的是另一種常用的jackson配置方式:配置類,就是自己編寫程式碼例項化和配置springboot全域性使用的ObjectMapper例項; ### 原始碼下載 1. 如果您不想編碼,可以在GitHub下載所有原始碼,地址和連結資訊如下表所示(https://github.com/zq2599/blog_demos): | 名稱 | 連結 | 備註| | :-------- | :----| :----| | 專案主頁| https://github.com/zq2599/blog_demos | 該專案在GitHub上的主頁 | | git倉庫地址(https)| https://github.com/zq2599/blog_demos.git | 該專案原始碼的倉庫地址,https協議 | | git倉庫地址(ssh)| [email protected]:zq2599/blog_demos.git | 該專案原始碼的倉庫地址,ssh協議 | 2. 這個git專案中有多個資料夾,本章的應用在jacksondemo資料夾下,如下圖紅框所示: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202102/485422-20210208083702014-1716440407.png) 3. jacksondemo是父子結構的工程,本篇的程式碼在springbootconfigbean子工程中,如下圖: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202102/485422-20210208083702657-601770152.jpg) ### 編碼 1. 在父工程jacksondemo下新增子工程springbootconfigbean,pom.xml如下: ```xml ``` 2. 本文最重要的程式碼是配置類JacksonConfig.java,如下,需要ConditionalOnMissingBean註解避免衝突,另外還給例項指定了名稱customizeObjectMapper,如果應用中通過Autowired使用此例項,需要指定這個名字,避免報錯"There is more than one bean of 'ObjectMapper ' type": ```java @Configuration public class JacksonConfig { @Bean("customizeObjectMapper") @Primary @ConditionalOnMissingBean(ObjectMapper.class) public ObjectMapper getObjectMapper(Jackson2ObjectMapperBuilder builder) { ObjectMapper mapper = builder.build(); // 日期格式 mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")); // 美化輸出 mapper.enable(SerializationFeature.INDENT_OUTPUT); return mapper; } } ``` 3. 對於JacksonConfig.getObjectMapper方法內的設定,如果您想做更多設定,請參考[《jackson學習之三:常用API操作》](https://xinchen.blog.csdn.net/article/details/108192174)裡面的設定內容; - 啟動類依然很簡單: ```java package com.bolingcavalry.springbootconfigbean; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringbootConfigBeanApplication { public static void main(String[] args) { SpringApplication.run(SpringbootConfigBeanApplication.class, args); } } ``` 4. swagger配置: ```java package com.bolingcavalry.springbootconfigbean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import springfox.documentation.builders.ApiInfoBuilder; import springfox.documentation.builders.PathSelectors; import springfox.documentation.builders.RequestHandlerSelectors; import springfox.documentation.service.ApiInfo; import springfox.documentation.service.Contact; import springfox.documentation.service.Tag; import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket createRestApi() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(apiInfo()) .tags(new Tag("JsonPropertySerializationController", "JsonProperty相關測試")) .select() // 當前包路徑 .apis(RequestHandlerSelectors.basePackage("com.bolingcavalry.springbootconfigbean.controller")) .paths(PathSelectors.any()) .build(); } //構建 api文件的詳細資訊函式,注意這裡的註解引用的是哪個 private ApiInfo apiInfo() { return new ApiInfoBuilder() //頁面標題 .title("SpringBoot整合Jackson(基於配置檔案)") //建立人 .contact(new Contact("程式設計師欣宸", "https://github.com/zq2599/blog_demos", "[email protected]")) //版本號 .version("1.0") //描述 .description("API 描述") .build(); } } ``` 5. 最後是測試用的Controller類,要注意的是在使用ObjectMapper例項的地方,用Autowired註解的時候,記得帶上Qualifier註解: ```java package com.bolingcavalry.springbootconfigbean.controller; import com.bolingcavalry.springbootconfigbean.bean.Test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/jsonproperty") @Api(tags = {"JsonPropertySerializationController"}) public class JsonPropertySerializationController { private static final Logger logger = LoggerFactory.getLogger(JsonPropertySerializationController.class); @Qualifier("customizeObjectMapper") @Autowired ObjectMapper mapper; @ApiOperation(value = "測試序列化", notes = "測試序列化") @RequestMapping(value = "/serialization", method = RequestMethod.GET) public Test serialization() throws JsonProcessingException { Test test = new Test(); logger.info(mapper.writeValueAsString(test)); return test; } @ApiOperation(value = "測試反序列化", notes="測試反序列化") @RequestMapping(value = "/deserialization",method = RequestMethod.PUT) public String deserialization(@RequestBody Test test) { return test.toString(); } } ``` ### 驗證 1. 啟動SpringbootConfigBeanApplication後,瀏覽器開啟:http://localhost:8080/swagger-ui.html 2. 先驗證序列化介面/jsonproperty/serialization: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202102/485422-20210208083705172-1073664773.jpg) 3. 再驗證反序列化介面 /jsonproperty/deserialization: ![在這裡插入圖片描述](https://img2020.cnblogs.com/other/485422/202102/485422-20210208083708051-1813161385.jpg) - 至此,整個《jackson學習》系列就全部完成了,希望這十篇內容能夠給您帶來一些參考,助您在編碼過程中更加得心應手的使用Jackson; ### 你不孤單,欣宸原創一路相伴 1. [Java系列](https://xinchen.blog.csdn.net/article/details/105068742) 2. [Spring系列](https://xinchen.blog.csdn.net/article/details/105086498) 3. [Docker系列](https://xinchen.blog.csdn.net/article/details/105086732) 4. [kubernetes系列](https://xinchen.blog.csdn.net/article/details/105086794) 5. [資料庫+中介軟體系列](https://xinchen.blog.csdn.net/article/details/105086850) 6. [DevOps系列](https://xinchen.blog.csdn.net/article/details/105086920) ### 歡迎關注公眾號:程式設計師欣宸 > 微信搜尋「程式設計師欣宸」,我是欣宸,期待與您一同暢遊Java世界... [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blo