記一次開發(fā)遇到的問(wèn)題:@JSONField和@JsonProperty注解的區(qū)別

@JSONField和@JsonProperty注解的區(qū)別

在一次開發(fā)過(guò)程中需要將請(qǐng)求報(bào)文的字段通過(guò)been做一次轉(zhuǎn)換,發(fā)現(xiàn)@JSONField可以正常轉(zhuǎn)換,而@JsonProperty會(huì)出現(xiàn)失效的問(wèn)題,于是總結(jié)了兩注解的區(qū)別:

相同

都能解決json字符串的某些屬性名和JavaBean中的屬性名匹配不上的問(wèn)題:

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 測(cè)試@JSONField和@JsonProperty注解
 * @AUTHER: sk
 * @DATE: 2021/4/21
 **/
@Data
public class TestPayList {

    //測(cè)試@JSONField注解
    @JSONField(name ="curRepayAmt")
    private BigDecimal payAmt;

    //測(cè)試@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);
    }
}

結(jié)果:


image

至此,兩種注解都能達(dá)到想要效果,但是當(dāng)把這個(gè)been作為結(jié)果返回時(shí),@JsonProperty會(huì)出現(xiàn)失效的情況,總結(jié)下原因是因?yàn)樽詈箜憫?yīng)時(shí)是使用FastJson做json序列化(阿里巴巴的),換成net.sf.json.JSONObject就行了,但是為了方便,我選擇了統(tǒng)一使用@JSONField注解

區(qū)別
1.框架不同

@jsonProperty是 Jackson的包,而@jsonfield是fastjson的包

2.用法不同

(1)bean轉(zhuǎn)換成Json字符串:
@JsonProperty:ObjectMapper().writeValueAsString(Object value)
@JSONField:ObjectMapper().readValue(String content, Class valueType)
(2)Json字符串轉(zhuǎn)化為bean:
@JsonProperty:ObjectMapper().readValue(String content, Class valueType)
@JSONField:JSONObject.parseObject(String content, Class valueType)
@JSONField這個(gè)注解可以用于get、set以及屬性上面
(3)@JSONproperty這個(gè)注解用于屬性上面
如把trueName屬性序列化為name,可以在屬性名上面增加@JsonProperty(value=“name”)。
(4)jackson的@JsonIgnore使用
作用:在json序列化時(shí)將java bean中的一些屬性忽略掉,序列化和反序列化都受影響。
使用方法:一般標(biāo)記在屬性或者方法上,返回的json數(shù)據(jù)即不包含該屬性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容