十七、springboot配置FastJson為Spring Boot默認JSON解析框架


前提

  springboot默認自帶json解析框架,默認使用jackson,如果使用fastjson,可以按照下列方式配置使用

1.引入fastjson依賴庫:

  maven:

<dependencies>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.46</version>
    </dependency>
</dependencies>

  gradle:

compile("com.alibaba:fastjson:${fastJsonVersion}")
ext {
        fastJsonVersion    = '1.2.46'
    }

  注: 這里要說下很重要的話,官方文檔說的1.2.10以后,會有兩個方法支持HttpMessageconvert,一個是FastJsonHttpMessageConverter,支持4.2以下的版本,一個是FastJsonHttpMessageConverter4支持4.2以上的版本,具體有什么區別暫時沒有深入研究。這里也就是說:低版本的就不支持了,所以這里最低要求就是1.2.10+

2.在啟動類中配置

2.1配置方式一(通過繼承的方式)

  1、啟動類繼承WebMvcConfigurerAdapter
  2、重寫configureMessageConverters方法

@SpringBootApplication
@EnableDiscoveryClient
@EnableScheduling
public class MemberApplication extends WebMvcConfigurerAdapter {
    /**
     * 配置FastJson為方式一
     * @return*/
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        super.configureMessageConverters(converters);
        /*
         * 1、需要先定義一個convert轉換消息的對象 2、添加fastJson的配置信息,比如:是否要格式化返回json數據 3、在convert中添加配置信息
         * 4、將convert添加到converters當中
         * 
         */
        // 1、需要先定義一個·convert轉換消息的對象;
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 2、添加fastjson的配置信息,比如 是否要格式化返回json數據
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        // 3、在convert中添加配置信息.
        fastConverter.setFastJsonConfig(fastJsonConfig);
        // 4、將convert添加到converters當中.
        converters.add(fastConverter);
    }

    public static void main(String[] args) {
        SpringApplication.run(MemberApplication.class, args);
    }

}

  注:開發中為了統一管理配置,可以放入配置類中,啟動類只做啟動的功能

@Configuration
public class HttpConverterConfig {

    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        // 1.定義一個converters轉換消息的對象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 2.添加fastjson的配置信息,比如: 是否需要格式化返回的json數據
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        // 3.在converter中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);
        // 4.將converter賦值給HttpMessageConverter
        HttpMessageConverter<?> converter = fastConverter;
        // 5.返回HttpMessageConverters對象
        return new HttpMessageConverters(converter);
    }
}

2.2配置方式二(通過@Bean注入的方式

  在App.java啟動類中,注入Bean : HttpMessageConverters

@SpringBootApplication
@EnableDiscoveryClient
@EnableScheduling
public class MemberApplication {
    /**
     * 配置FastJson方式二
     * @return  HttpMessageConverters
     */
    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverters() {
        // 1.定義一個converters轉換消息的對象
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        // 2.添加fastjson的配置信息,比如: 是否需要格式化返回的json數據
        FastJsonConfig fastJsonConfig = new FastJsonConfig();
        fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
        // 3.在converter中添加配置信息
        fastConverter.setFastJsonConfig(fastJsonConfig);
        // 4.將converter賦值給HttpMessageConverter
        HttpMessageConverter<?> converter = fastConverter;
        // 5.返回HttpMessageConverters對象
        return new HttpMessageConverters(converter);
    }
    
    public static void main(String[] args) {
        SpringApplication.run(MemberApplication.class, args);
    }

}

  在pojo類中:

    private int id;
    private String name;
    
    //com.alibaba.fastjson.annotation.JSONField
    @JSONField(format="yyyy-MM-dd HH:mm")
    private Date createTime;//創建時間.
    
    /*
     * serialize:是否需要序列化屬性.
     */
    @JSONField(serialize=false)
    private String remarks;//備注信息.

那么這時候在實體類中使用@JSONField(serialize=false),是不是此字段就不返回了,如果是的話,那么恭喜你配置成功了,其中JSONField的包路徑是:com.alibaba.fastjson.annotation.JSONField。

參考:

  http://www.cnblogs.com/xujie09/p/8461483.html

  https://blog.csdn.net/xuqingge/article/details/53561529


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM