jackson学习之十(终篇):springboot整合(配置类)

网友投稿 879 2022-05-30

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

本文是《Jackson学习》系列的终篇,经过前面的一系列实战,相信您已可以熟练使用jackson灵活的执行各种json序列化和反序列化操作,那么,本篇就以轻松的方式来完成整个系列吧;

上一篇介绍的是在springboot中通过配置文件对jackson做设置,今天要聊的是另一种常用的jackson配置方式:

配置类

,就是自己编写代码实例化和配置springboot全局使用的ObjectMapper实例;

源码下载

如果您不想编码,可以在GitHub下载所有源码,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):

这个git项目中有多个文件夹,本章的应用在

jacksondemo

文件夹下,如下图红框所示:

jacksondemo

是父子结构的工程,本篇的代码在

springbootconfigbean

子工程中,如下图:

编码

在父工程jacksondemo下新增子工程springbootconfigbean,pom.xml如下:

4.0.0 jacksondemo com.bolingcavalry 1.0-SNAPSHOT ../pom.xml com.bolingcavalry springbootconfigbean 0.0.1-SNAPSHOT springbootconfigbean Demo project for Spring Boot with Jackson, configuration from config bean 1.8 org.springframework.boot spring-boot-dependencies 2.3.3.RELEASE pom import org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine io.springfox springfox-swagger2 io.springfox springfox-swagger-ui org.springframework.boot spring-boot-maven-plugin

本文最重要的代码是配置类

JacksonConfig.java

jackson学习之十(终篇):springboot整合(配置类)

,如下,需要

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后,浏览器打开:

http://localhost:8080/swagger-ui.html

先验证序列化接口/jsonproperty/serialization:

再验证反序列化接口 /jsonproperty/deserialization:

至此,整个《jackson学习》系列就全部完成了,希望这十篇内容能够给您带来一些参考,助您在编码过程中更加得心应手的使用Jackson;

欢迎关注华为云博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴…

Java JSON Spring Boot

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Docker Swarm架构、特性与基本实践
下一篇:2020年年终总结
相关文章