SpringBoot中整合fastjson,自定义jackson、gson

如今炒的火热的前后端分离项目,大多数开发人员选择RESTful设计风格,Java Web 人员经常要设计 RESTful API,这种设计通常使用 json 数据进行交互。那么前端传入的 json 数据如何序列化成 Java 对象,后端返回的结果又如何将 Java 对象解析成 json 格式数据返回给前端,在整个解析过程,HttpMessageConverter 起到了重要作用,各大公司实现了自己的HttpMessageConverter ,如:

  1. jackson的MappingJackson2HttpMessageConverter;
  2. gson的GsonHttpMessageConverter;
  3. fastjson的FastJsonHttpMessageConverter等等。

1. 自定义jackson

spring-boot-stater-web依赖的json解析是jackson,同时也为我们进行了jackson的一系列自动化配置,这样我们不需要导入其他json依赖,就可以直接使用,其中起到关键作用的是MappingJackson2HttpMessageConverter;

@Bean
//如果我们自己提供MappingJackson2HttpMessageConverter则不使用Springboot提供的
@ConditionalOnMissingBean(value = MappingJackson2HttpMessageConverter.class,
		ignoredType = {
     
				"org.springframework.hateoas.server.mvc.TypeConstrainedMappingJackson2HttpMessageConverter",
				"org.springframework.data.rest.webmvc.alps.AlpsJsonHttpMessageConverter" })
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(ObjectMapper objectMapper) {
     
	return new MappingJackson2HttpMessageConverter(objectMapper);
}

@ConditionalOnMissingBean(value = MappingJackson2HttpMessageConverter.class,…)注解也告诉我们,如果没有找到自定义的MappingJackson2HttpMessageConverter,将使用下面springboot提供的。
如果我们要自定义jackson只需重新定义MappingJackson2HttpMessageConverter,那么springboot提供的将不会生效,自定义方式如下:

@Configuration
public class WebMvcConfig {
     
    
    @Bean
    MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
     
        MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
        ObjectMapper objectMapper = new ObjectMapper();
        //自定义json日期格式
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd"));
        //其他自定义配置
        converter.setObjectMapper(objectMapper);
        return converter;
    }
}

2. 自定义Gson

由于spring-boot-stater-web已引入jackson,如果要使用gson需将jackson包排除掉,然后引入gson依赖即可,在pom.xml中添加如下配置:

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    <exclusions>
    	
        <exclusion>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jsonartifactId>
        exclusion>
    exclusions>
dependency>

<dependency>
    <groupId>com.google.code.gsongroupId>
    <artifactId>gsonartifactId>
dependency>

此时我们发现gson依赖并不需要填写版本号,那是因为,springboot也为gson做了一套默认配置,同时管理gson版本,具体可查看spring-boot-dependencies下的pom依赖;
同样我们如果要自定义gson配置,只需重新定义GsonHttpMessageConverter即可:

@Bean
GsonHttpMessageConverter gsonHttpMessageConverter(){
     

    GsonHttpMessageConverter converter = new GsonHttpMessageConverter();
    GsonBuilder gsonBuilder = new GsonBuilder();
    //使用GsonBuilder配置日期格式
    gsonBuilder.setDateFormat("yyyy-MM-dd");
    //其他配置
    converter.setGson(gsonBuilder.create());
    return converter;
}

3. 整合fastjson

同样将jackson包排除掉,然后引入fastjson依赖

<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
    <exclusions>
    	
        <exclusion>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-jsonartifactId>
        exclusion>
    exclusions>
dependency>

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>fastjsonartifactId>
    <version>1.2.58version>
dependency>

fastjson与jackson和gson略有不同,springboot没有提供fastjson的自动化配置,所以,就需要我们手动提供fastjson配置,如下:

@Bean
FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
     
    FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
    FastJsonConfig config = new FastJsonConfig();
    //配置日期格式
    config.setDateFormat("yyyy-MM-dd");
    //其他配置
    converter.setFastJsonConfig(config);
    return converter;
}

你可能感兴趣的:(Spring,Boot,Java笔记,java,json,spring,spring,boot)