English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

أسئلة حول تعليق @JSONField في fastjson (تحليل مفصل)

@JSONField

看源码将能作用在字段和方法上。

取取网上说的,

一、作用Field

@JSONField用于Field时,将不仅定义输入key的名称,也定义了输出名称。

But in my use, I found that it is not as described above.

For example

@JSONField(name="project_id")
private Long ProjectID

I found that when bean is converted to json, it is not in the form of "project_id":xxx, and when json is converted to bean, the content of "project_id":xx will not be set to ProjectID.

The version of fastjson is 1.1.15

Two, acting on setter and getter methods This method is expected during use.

/**bean 转json 时会把bean中的ProjectID转换为project_id */
  @JSONField(name="project_id")
  public Long getProjectID() {
    return ProjectID;
  }
/**json 转bean 时会把json中的project_id值赋值给projectID*/
  @JSONField(name="project_id")
  public void setProjectID(Long projectID) {
    ProjectID = projectID;
  }

Three, other uses of @JSONField, check the source code of @JSONField annotation, in addition to name, format, serialize, deserialize, serialzeFeatures, parseFeatures can be used,

•format,It seems to be useful for formatting date formats in fields of Date type.

•serializeand deserialize are boolean types, usage is

@JSONField(serialize=false) 
private Long ProjectID

This means that this field is not included in the serialization process. The opposite of deserialize. But there is something to note, I saw other places say that when the field is final, the annotation on the field is not effective, in which case it should be placed on the get

or set method.

•serialzeFeaturesI use this property, fastjson's default serialization rule is that when the field value is null, it will not serialize this field for you, for example, I have such a requirement,

{"fieldName":"project_id","operator":"is not","value":null}

One object is serialized like this, my code is as follows

CriteriaVO criteriaVO = new CriteriaVO();
    criteriaVO.setFieldName("project_id");
    criteriaVO.setOperator("is not");
    criteriaVO.setValue(null);

الافتراضي هو أنه سيتم تسلسلها كما يلي

{"fieldName":"project_id","operator":"is not"}

بالطبع، يسمح لك fastjson بتحكم في قواعد التسلسل.

هذا يستخدم SerializerFeature، وهو نوع من القوائم، يحتوي على عدة قيم، يمكن للجميع معرفة معانيها إذا كان لديهم اهتمام،

أنا أستخدم واحدة فقط،

@JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
private String value;

عندما يكون قيمة value null، سيتم تسلسلها كما يلي. هذا هو النتيجة التي أريدها

{"fieldName":"project_id","operator":"is not","value":null} 

وواجهت مشكلة أخرى، عندما يكون نوع الحقل نوع int، مثل

private int start;
private int limit;

إذا لم أقوم بتعيين القيمة، سيتم تسلسلها كما يلي

"limit":0,"start":0

القيمة الافتراضية هي 0، أما هدفي هو أن لا تظهر إذا لم يتم تعيين القيمة.

أنا ببساطة قمت بتحويل نوعهم إلى Integer. يجب أن يكون هناك طرق أخرى لحلها من خلال تعريف سلوك التسلسل المخصص، لا أقوم بالبحث عنها حاليًا.

هذا المقال حول بعض الأسئلة حول @JSONField ملاحظة من fastjson (تفسير) هو كل المحتوى الذي أشاركه معكم، آمل أن يكون مرجعًا جيدًا وأن أطلب منكم الدعم الكبير لتعليمات النطق.

أنت قد تحب