English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
@JSONField
Durch das Betrachten des Quellcodes kann es auf Felder und Methoden angewendet werden.
Zitate von Online-Aussagen
1. Funktion
@JSONField, der auf das Feld angewendet wird, definiert nicht nur den Namen des Eingabeschlüssels, sondern auch den Namen des Ausgabeschlüssels.
Aber ich habe in der Verwendung festgestellt, dass es nicht so ist, wie gesagt.
Zum Beispiel
@JSONField(name="project_id") private Long ProjectID
Ich habe festgestellt, dass das Umwandeln von Bean in JSON nicht in der Form "project_id":xxx erfolgt, und beim Umwandeln von JSON in ein Bean wird der Inhalt von "project_id":xx nicht in ProjectID eingestellt.
Die Version von fastjson ist1.1.15
Zwei, Anwendung auf Setter- und Getter-Methode Diese Methode entspricht den Erwartungen im Prozess der Verwendung.
/**Beim Umwandeln von einem Bean in JSON wird ProjectID in project_id umgewandelt */ @JSONField(name="project_id") public Long getProjectID() { return ProjectID; } /**Beim Umwandeln von JSON in ein Bean wird der Wert von project_id in projectID zugewiesen*/ @JSONField(name="project_id") public void setProjectID(Long projectID) { ProjectID = projectID; }
Drei, andere Verwendungen von @JSONField, siehe die Quellcode des @JSONField-Annotations, außer name kann verwendet werden, gibt es auch format, serialize, deserialize, serialzeFeatures, parseFeatures
•format,Es scheint nützlich zu sein, Date-Typen zu formatieren.
•serializeund deserialize sind Boolean-Typen und werden wie folgt verwendet
@JSONField(serialize=false) private Long ProjectID
Das bedeutet, dass das Feld bei der Serialisierung nicht enthalten ist. Deserialisieren ist umgekehrt. Aber es gibt etwas zu beachten, ich habe in anderen Orten gelesen, dass die Annotation auf dem Feld nicht wirkt, wenn das Feld final ist, in diesem Fall sollte sie auf den get
oder auf set-Methode.
•serialzeFeaturesIch verwende diese Eigenschaft, die Standard-Serialisierungsregeln von fastjson sind so, dass es das Feld nicht serialisiert, wenn der Wert des Felds null ist, zum Beispiel habe ich einen solchen Bedarf
{"fieldName":"project_id","operator":"is not","value":null}
Ein Objekt wird so serialisiert, mein Code sieht wie folgt aus
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了。应该有其他通过自定义序列化行为的方式来解决,暂不研究。
关于fastjson的@JSONField注解的一些问题(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。