FastJson @JSONField解决Json数据转换为Java对象时设置别名

3,616 阅读1分钟

转换要求

JSON数据转换为Java实体对象时,字段会有不对应的情况:比如大小写、下划线、驼峰、或者JSON数据的key中有特殊字符,无法进行属性映射。

解决思路

使用@JSONField注解

  1. JSON数据
    {
        "user.age": 18,
    	"userName": "kaysen"
    }
    
  2. Java对象
    @JSONField(name = "userName")
    private String name;
    
    @JSONField(name = "user.age")
    private Integer age;
    
  3. 转换与输出
    User user = JSON.parseObject(user, User.class);
    System.out.println(user );
    输出:
    User(name=kaysen, age=18)
    

@JSONField相关

  • 解决字段映射问题;
  • 解决数据格式问题,比如日期格式化;
  • 序列化与反序列化问题;
  • 默认值设置等等。
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface JSONField {
    int ordinal() default 0;

    String name() default "";

    String format() default "";

    boolean serialize() default true;

    boolean deserialize() default true;

    SerializerFeature[] serialzeFeatures() default {};

    Feature[] parseFeatures() default {};

    String label() default "";

    boolean jsonDirect() default false;

    Class<?> serializeUsing() default Void.class;

    Class<?> deserializeUsing() default Void.class;

    String[] alternateNames() default {};

    boolean unwrapped() default false;

    String defaultValue() default "";
}