@JSONField アノテーションと @JsonProperty アノテーションの違い
開発プロセスにおいて、リクエストメッセージのフィールドをbeenから変換する必要がある場合、@JSONFieldは正常に変換できるが、@JsonPropertyは失敗することがわかったので、2つのアノテーションの違いをまとめます。
同じ
どちらも、JSON 文字列の一部の属性名が JavaBean の属性名と一致しないという問題を解決できます。
package mrt;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.math.BigDecimal;
/**
* @description 测试@JSONField和@JsonProperty注解
* @AUTHER: sk
* @DATE: 2021/4/21
**/
@Data
public class TestPayList {
//测试@JSONField注解
@JSONField(name ="curRepayAmt")
private BigDecimal payAmt;
//测试@JsonProperty注解
@JsonProperty("payerPayNo")
private String payNo;
public static void main(String[] args) {
String str = "{\n" +
" \"curRepayAmt\": 1200,\n" +
" \"payerPayNo\": \"202102271616153\"\n" +
" \n" +
"}";
TestPayList testPayList = JSONObject.parseObject(str, TestPayList.class);
System.out.println("testPayList="+testPayList);
}
}
結果:
これまでのところ、両方のアノテーションは目的の効果を達成できますが、been が結果として返されると @JsonProperty は失敗します。その理由は、最終応答が json シリアル化 (Alibaba の) に FastJson を使用しているためです。これを net.sf に置き換えるだけです。 json.JSONObject ですが、便宜上、 @JSONField アノテーションを一律に使用することにしました。
違い
1. 枠組みが違う
@jsonProperty は Jackson のパッケージ、@jsonfield は fastjson のパッケージです
2. さまざまな使い方
(1) Bean を Json 文字列に変換:
@JsonProperty: ObjectMapper().writeValueAsString(Object value)
@JSONField: ObjectMapper().readValue(String content, Class valueType)
(2) Json 文字列を Bean に変換:
@JsonProperty: ObjectMapper( ).readValue(String content, Class valueType)
@JSONField:JSONObject.parseObject(String content, Class valueType)
@JSONField このアノテーションは get、set、プロパティで使用できます
(3) @JSONproperty このアノテーションは
To などのプロパティで使用されますtrueName 属性を name にシリアル化する場合は、属性名に @JsonProperty(value="name") を追加できます。
(4) jackson の @JsonIgnore 関数の使用
: Java Bean の一部のプロパティは、json シリアル化中に無視され、シリアル化と逆シリアル化の両方に影響します。
使用方法: 通常、属性またはメソッドにマークされますが、返される JSON データにはこの属性は含まれません。