美文网首页开发
记一次开发遇到的问题:@JSONField和@JsonPrope

记一次开发遇到的问题:@JSONField和@JsonPrope

作者: 划水的鱼仔 | 来源:发表于2021-05-21 10:24 被阅读0次

    @JSONField和@JsonProperty注解的区别

    在一次开发过程中需要将请求报文的字段通过been做一次转换,发现@JSONField可以正常转换,而@JsonProperty会出现失效的问题,于是总结了两注解的区别:

    相同

    都能解决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);
        }
    }
    
    

    结果:


    image

    至此,两种注解都能达到想要效果,但是当把这个been作为结果返回时,@JsonProperty会出现失效的情况,总结下原因是因为最后响应时是使用FastJson做json序列化(阿里巴巴的),换成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这个注解用于属性上面
    如把trueName属性序列化为name,可以在属性名上面增加@JsonProperty(value=“name”)。
    (4)jackson的@JsonIgnore使用
    作用:在json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。
    使用方法:一般标记在属性或者方法上,返回的json数据即不包含该属性。

    相关文章

      网友评论

        本文标题:记一次开发遇到的问题:@JSONField和@JsonPrope

        本文链接:https://www.haomeiwen.com/subject/npxwjltx.html