Springboot使用alibaba的fastJson,@JSONField不起做用的問題

在Springboot中默認的JSON解析框架是jackson前端

今天引入alibaba的fastjson,使用@JSONField(serialize=false),讓@RestController轉換數據給前端的時候不序列化莫些字段,發現@JSONField根本不起做用java

在網上查閱了一番,發現Springboot使用fastjson須要替換默認的json轉換器的編程

具體解決方法有兩種:json

本文借鑑地址:https://blog.csdn.net/qq_28929589/article/details/79245774框架

1、(1)啓動類繼承extends WebMvcConfigurerAdapter (2)覆蓋方法configureMessageConverterside

2、(1)在App.java啓動類中,注入Bean : HttpMessageConvertersspa

第一種方式:.net

啓動類繼承WebMvcConfigurerAdapter,而後對configureMessageConverters方法進行重寫code

 1  @Override
 2 
 3     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
 4 
 5         super.configureMessageConverters(converters);
 6         FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
 7 
 8         FastJsonConfig fastJsonConfig = new FastJsonConfig();
 9         fastJsonConfig.setSerializerFeatures(
10                 SerializerFeature.PrettyFormat
11         );
12 
13         fastConverter.setFastJsonConfig(fastJsonConfig);
14         converters.add(fastConverter);
15 
16     }

第二種方式:在App.java啓動類中,注入Bean : HttpMessageConvertersorm

1 @Bean
2     public HttpMessageConverters fastJsonHttpMessageConverters() {
3         FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
4         FastJsonConfig fastJsonConfig = new FastJsonConfig();
5         fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
6         fastConverter.setFastJsonConfig(fastJsonConfig);
7         HttpMessageConverter<?> converter = fastConverter;
8         return new HttpMessageConverters(converter);
9     }

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

fastjson使用@JSONField、@JSONType、SerializeFilter定製序列化

使用fastjson進行序列化,就是把JavaBean轉換爲JSON格式的數據。並且fastjson的序列化高度可控性,能夠本身定製序列化。fastjson的定製序列化有不少中實現方式,主要有以下的方式:

  1. 經過@JSONField定製序列化
  2. 經過@JSONType定製序列化
  3. 經過SerializeFilter定製序列化

1在實體類上的字段使用@JSONField定製序列化

//配置序列化的時候,不序列化id 

@JSONField(serialize=false) 

private int id; 

// 配置序列化的名稱 

@JSONField(name="gender") 

public String sex;

2、在類上經過@JSONType定製序列化

//配置序列化的時候,不序列化id  sex

@JSONType(ignores ={"id", "sex"}) 

// 配置序列化的時候,序列化name sex

@JSONType(includes={"name","sex"}) 

注:注意和@JSONField不一樣的是,@JSONType是配置在類上的,而@JSONField是配置在字段和方法上的。

3、使用SerializeFilter定製序列化:

經過SerializeFilter能夠使用擴展編程的方式實現定製序列化。fastjson提供了多種SerializeFilter:

PropertyPreFilter: 根據PropertyName判斷是否序列化;PropertyFilter: 根據PropertyName和PropertyValue來判斷是否序列化;NameFilter: 修改Key,若是須要修改Key,process返回值則可;ValueFilter: 修改Value;BeforeFilter: 序列化時在最前添加內容;AfterFilter: 序列化時在最後添加內容

相關文章
相關標籤/搜索