Fastjson解析非标准的javaBean

问题描述

调用一个http接口,返回格式为json;但是json中的属性名,是采用Pascal风格(大驼峰),想将返回的json直接转换为项目中的javaBean,但是javaBean是小驼峰命名规范,无法正确解析。

解决方案

  • Fastjson JSONField注解
package com.alibaba.fastjson.annotation;

public @interface JSONField {
    // 配置序列化和反序列化的顺序,1.1.42版本之后才支持
    int ordinal() default 0;

     // 指定字段的名称
    String name() default "";

    // 指定字段的格式,对日期格式有用
    String format() default "";

    // 是否序列化
    boolean serialize() default true;

    // 是否反序列化
    boolean deserialize() default true;

     // 在fastjson-1.2.12版本添加,它的用途是:当你有一个字段是字符串类型,里面是json格式数据,你希望直接输入,而不是经过转义之后再输出。
    boolean jsonDirect() default false;
}

  • 对要转换的javaBean上,增加注解
 public class A {
      @JSONField(name="ID")
      private int id;

      public int getId() {return id;}
      public void setId(int value) {this.id = id;}
 }
  • 过滤器方案
    SerializeFilter是通过编程扩展的方式定制序列化。fastjson支持6种SerializeFilter,用于不同场景的定制序列化。
    1. PropertyPreFilter 根据PropertyName判断是否序列化
    2. PropertyFilter 根据PropertyName和PropertyValue来判断是否序列化
    3. NameFilter 修改Key,如果需要修改Key,process返回值则可
    4. ValueFilter 修改Value
    5. BeforeFilter 序列化时在最前添加内容
    6. AfterFilter 序列化时在最后添加内容
// fastjson内置一个PascalNameFilter,用于输出将首字符大写的Pascal风格
Object obj = ...;
String jsonStr = JSON.toJSONString(obj, new PascalNameFilter());

参考链接

Fastjson

你可能感兴趣的:(Java,java,fastjson)