jackson學習之十(終篇):springboot整合(配置類)
歡迎訪問我的GitHub
github.com/zq2599/blog_demos
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概覽
- 本文是《jackson學習》系列的終篇,經過前面的一系列實戰,相信您已可以熟練使用jackson靈活的執行各種json序列化和反序列化操作,那麼,本篇就以輕鬆的方式來完成整個系列吧;
- 上一篇介紹的是在springboot中透過配置檔案對jackson做設定,今天要聊的是另一種常用的jackson配置方式:配置類,就是自己編寫程式碼例項化和配置springboot全域性使用的ObjectMapper例項;
原始碼下載
- 如果您不想編碼,可以在GitHub下載所有原始碼,地址和連結資訊如下表所示(github.com/zq2599/blog_demos):
名稱 | 連結 | 備註 |
---|---|---|
專案主頁 | github.com/zq2599/blog_demos | 該專案在GitHub上的主頁 |
git倉庫地址(https) | github.com/zq2599/blog_demos.git | 該專案原始碼的倉庫地址,https協議 |
git倉庫地址(ssh) | :zq2599/blog_demos.git | 該專案原始碼的倉庫地址,ssh協議 |
- 這個git專案中有多個資料夾,本章的應用在jacksondemo資料夾下,如下圖紅框所示:
- jacksondemo是父子結構的工程,本篇的程式碼在springbootconfigbean子工程中,如下圖:
編碼
- 在父工程jacksondemo下新增子工程springbootconfigbean,pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
4.0.0jacksondemocom.bolingcavalry1.0-SNAPSHOT../pom.xmlcom.bolingcavalryspringbootconfigbean0.0.1-SNAPSHOTspringbootconfigbeanDemo project for Spring Boot with Jackson, configuration from config bean1.8org.springframework.bootspring-boot-dependencies2.3.3.RELEASEpomimportorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-testtestorg.junit.vintagejunit-vintage-engineio.springfoxspringfox-swagger2io.springfoxspringfox-swagger-uiorg.springframework.bootspring-boot-maven-plugin
- 本文最重要的程式碼是配置類JacksonConfig.java,如下,需要ConditionalOnMissingBean註解避免衝突,另外還給例項指定了名稱customizeObjectMapper,如果應用中透過Autowired使用此例項,需要指定這個名字,避免報錯"There is more than one bean of 'ObjectMapper ’ type":
@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;
}
}
- 對於JacksonConfig.getObjectMapper方法內的設定,如果您想做更多設定,請參考[《jackson學習之三:常用API操作》]裡面的設定內容;
- 啟動類依然很簡單:
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);
}
}
- swagger配置:
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", "zq2599@gmail.com"))
//版本號
.version("1.0")
//描述
.description("API 描述")
.build();
}
}
- 最後是測試用的Controller類,要注意的是在使用ObjectMapper例項的地方,用Autowired註解的時候,記得帶上Qualifier註解:
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();
}
}
驗證
- 啟動SpringbootConfigBeanApplication後,瀏覽器開啟:
- 先驗證序列化介面/jsonproperty/serialization:
3. 再驗證反序列化介面 /jsonproperty/deserialization:
- 至此,整個《jackson學習》系列就全部完成了,希望這十篇內容能夠給您帶來一些參考,助您在編碼過程中更加得心應手的使用Jackson;
歡迎關注公眾號:程式設計師欣宸
>我是欣宸,期待與您一同暢遊Java世界…
github.com/zq2599/blog_demos
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/854/viewspace-2826998/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- jackson學習之九:springboot整合(配置檔案)Spring Boot
- SpringBoot學習之整合MybatisSpring BootMyBatis
- SpringBoot學習之整合AOPSpring Boot
- SpringBoot系統學習 - 配置篇Spring Boot
- springboot 整合 Shiro 配置類Spring Boot
- SpringBoot學習之整合SwaggerSpring BootSwagger
- vc 學習點滴之終結篇
- java基礎學習之類集框架(十)Java框架
- 學習筆記|AS入門(十) 元件篇之Service筆記元件
- SpringBoot整合Activiti學習(一)Spring Boot
- Rabbit學習---SpringBoot整合RabbitMQSpring BootMQ
- JUnit5學習之八:綜合進階(終篇)
- Flutter學習篇(五)——路由剖析終篇Flutter路由
- 《springboot學習篇4》Spring Boot
- SpringBoot系列之YAML配置用法學習筆記Spring BootYAML筆記
- jackson學習之五:JsonInclude註解JSON
- jackson學習之七:常用Field註解
- jackson學習之八:常用方法註解
- Elasticsearch學習<四>SpringBoot整合esElasticsearchSpring Boot
- 個人學習系列 - SpringBoot整合RabbitMQSpring BootMQ
- Elasticsearch學習(三)springboot整合ElasticSearchElasticsearchSpring Boot
- 【springboot】學習4:整合JDBC、整合druid、整合mybatis、整合 SpringSecuritySpring BootJDBCUIMyBatisGse
- 死磕 java原子類之終結篇(面試題)Java面試題
- SpringBoot學習之mvcSpring BootMVC
- jackson學習之四:WRAP_ROOT_VALUE(root物件)物件
- SSM整合之使用配置類替換xml配置檔案(2)SSMXML
- Linux 學習:入門十法篇Linux
- SpringBoot 整合 Apollo 配置中心Spring Boot
- SpringBoot整合Apollo配置中心Spring Boot
- springboot整合kafka配置方式Spring BootKafka
- java學習之Date類、DateFormat類JavaORM
- SpringBoot資料訪問之整合Mybatis配置檔案Spring BootMyBatis
- Java學習之反射篇Java反射
- SpringBoot系統學習 - 啟動篇Spring Boot
- java學習之Math類Java
- java學習之Random類Javarandom
- java學習之System類Java
- java學習之Calender類Java