• Springboot使用alibaba的fastJson,@JSONField不起作用的问题


    在Springboot中默认的JSON解析框架是jackson

    今天引入alibaba的fastjson,使用@JSONField(serialize=false),让@RestController转换数据给前端的时候不序列化莫些字段,发现@JSONField根本不起作用

    在网上查阅了一番,发现Springboot使用fastjson需要替换默认的json转换器的

    具体解决方法有两种:

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

    一、(1)启动类继承extends WebMvcConfigurerAdapter (2)覆盖方法configureMessageConverters

    二、(1)在App.java启动类中,注入Bean : HttpMessageConverters

    第一种方式:

    启动类继承WebMvcConfigurerAdapter,然后对configureMessageConverters方法进行重写

     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 : HttpMessageConverters

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

  • 相关阅读:
    基于云的平台利用新技术来改变商店式购物营销
    在云上战斗:游戏设计师推出 Windows Azure 上的全球在线游戏
    use Visual studio2012 development kernel to hidden process on Windows8
    Mobile Services更新:增加了新的 HTML5/JS SDK 并对 Windows Phone 7.5 进行支持
    [转载]30个Oracle语句优化法例详解(3)
    [转载]Informix4gl FORM:直立控制录入两遍一概信息的设置
    [转载]Oracle数据库异构数据结合详解(1)
    [转载]informix onbar规复饬令用法
    [转载]30个Oracle语句优化划定端正详解(4)
    [转载]同一台效力器上搭建HDR实例
  • 原文地址:https://www.cnblogs.com/h-java/p/10220737.html
Copyright © 2020-2023  润新知