Fastjson JSONField


Fastjson JSONField


1. JSONField 소개


참고: 1. 속성이 비공개인 경우 set* 메서드가 있어야 합니다. 그렇지 않으면 역직렬화할 수 없습니다.

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;
}

2. JSONField 구성 방법

FieldInfo는 getter/setter 메서드 또는 필드에서 구성할 수 있습니다. 예:

2.1은 getter/setter에 구성되고

 
 public class A {
      private int id;

      @JSONField(name="ID")
      public int getId() {return id;}
      @JSONField(name="ID")
      public void setId(int value) {this.id = id;}
 }

2.2는

  public class A {
      @JSONField(name="ID")
      private int id;

      public int getId() {return id;}
      public void setId(int value) {this.id = id;}
 }

3 필드에 구성됩니다.

기본적으로 fastjson은 fieldName의 알파벳 순서에 따라 직렬화되는 Java Bean을 직렬화합니다. 서수를 전달할 수 있으며 필드 순서를 지정합니다. 이 기능을 사용하려면 버전 1.1.42 이상이 필요합니다.

 public class A {
      @JSONField(serialize=false)
      public Date date;
 }

 public class A {
      @JSONField(deserialize=false)
      public Date date;
 }

fastjson 버전 1.2.16 이후 JSONField는 새로운 사용자 정의 구성 serializeUsing을 지원합니다. 이는 다음과 같이 클래스의 특정 속성 직렬화를 개별적으로 사용자 정의할 수 있습니다.

public static class VO {
   @JSONField(ordinal = 3)
   private int f0;

   @JSONField(ordinal = 2)
   private int f1;

   @JSONField(ordinal = 1)
   private int f2;
}
6. 使用serializeUsing制定属性的序列化类

테스트 코드

public static class Model {
    @JSONField(serializeUsing = ModelValueSerializer.class)
    public int value;
}

public static class ModelValueSerializer implements ObjectSerializer {
    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType,
                      int features) throws IOException {
        Integer value = (Integer) object;
        String text = value + "元";
        serializer.write(text);
    }
}

7, JSONField alterNames

Fastjson은 버전 1.2.21의 gson에서 빌린 기능을 제공하며, 이는 역직렬화 중에 여러 다른 필드 이름의 사용을 지원합니다. JSONField의 대체 이름을 구성합니다.

Model model = new Model();
model.value = 100;
String json = JSON.toJSONString(model);
Assert.assertEquals("{\"value\":\"100元\"}", json);

8, JSONField

#🎜🎜 # fastjson-1.2.12 버전에서 JSONField는 새로운 구성 항목인 jsonDirect를 지원합니다. 그 목적은 json 형식 데이터가 포함된 문자열 유형의 필드가 있는 경우 이를 이스케이프하는 대신 직접 입력하려는 것입니다.