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.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
    	<!-- 移除默认的spring-boot-starter-json依赖 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-json</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入gson依赖 -->
<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
</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.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
    	<!-- 移除默认的spring-boot-starter-json依赖 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-json</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- 引入fastjson依赖 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值