在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: 序列化时在最后添加内容