在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定製序列化:
//配置序列化的時候,不序列化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: 序列化時在最後添加內容