開発中に遭遇した問題、@JSONField アノテーションと @JsonProperty アノテーションの違いを思い出してください。

@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 データにはこの属性は含まれません。

おすすめ

転載: blog.csdn.net/SHUKAI618/article/details/117110906