实体类封装命名不规范的请求或响应参数

参考资料地址1: @JsonProperty和@JSONField注解的区别及用法

参考资料地址2: https://blog.csdn.net/qq_41143240/article/details/115671561

01 @JsonProperty和@JSONField注解区别

目的

都是为了解决bean与json字段不一致问题,或者字段定义不符合前端所需要的标准

区别

1.框架不同:

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

用法不同:

@JSONField这个注解可以用于get、set以及属性上面

02 实体类封装命名不规范的请求或响应参数

@JSONField这个注解分别可以注解在实体类的属性、setter和getter方法上

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.ToString;

import java.util.HashMap;
import java.util.Map;

/**
 * 用驼峰的实体类封装命名不规范的请求或响应参数
 *
 * @author lyn
 * @date 2023/4/10 20:32
 */
public class JSONFieldTest {
    public static void main(String[] args) {
        //模拟第三方响应参数
        Map<String, Object> map = new HashMap<>(2);
        map.put("Name", "王五");
        //模拟接受第三方影响参数
        String json = JSON.toJSONString(map);
        SmellObjTwo obj = JSON.parseObject(json, SmellObjTwo.class);
        //查看参数封装结果
        System.out.println(obj);
        //SmellObjTwo(name=王五)
        //模拟封装请求第三方的请求参数
        json = JSON.toJSONString(obj);
        //查看参数封装结果
        System.out.println(json);
        //{"Name":"王五"}
    }
    @ToString
    public class SmellObjTwo{
        /**
         *  注解在属性上的时候可以设置一些序列化、格式化的属性
         *  @JSONField(serialize = false)---->序列化的时候忽略这个属性
         *  @JSONField(format = "yyyyMMdd")---->序列化和反序列化额时候使用yyyyMMdd,一般在Date类型的字段上使用
         */
        @JSONField(serialize = false)
        public String name;

        /**
         * 注解在set方法表示json转成bean的时候会将json中的Name属性赋值给实体类的Name
         * @param name
         */
        @JSONField(name="Name")
        public void setName(String name){
            this.name = name;
        }

        /**
         * 注解在get方法表示bean转换成json的时候会把实体类的Name属性值赋给json的Name
         * @return
         */
        @JSONField(name="Name")
        public String getName(){
            return this.name;
        }

    }
}

03 实体类接受命名不规范的响应参数

@JSONProperty

类似@JSONField注解注在setter方法上

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.HashMap;

/**
 * 用驼峰的实体类接受命名不规范的响应参数
 *
 * @author lyn
 * @date 2023/4/10 19:03
 */
public class JsonPropertyTest {
    @Data
    public class SmellObj {
        @JsonProperty("order_status")
        private String orderStatus;

        @JsonProperty("order_id")
        private Long orderId;
    }
    public static void main(String[] args) {
        //模拟第三方的响应参数
        HashMap<String, Object> map = new HashMap<>(2);
        map.put("order_status","支付中");
        map.put("order_id",1000L);
        String json = JSON.toJSONString(map);
        //模拟接受参数
        SmellObj obj = JSON.parseObject(json, SmellObj.class);
        //查看结果
        System.out.println(obj);
        //SmellObj(orderStatus=支付中, orderId=1000)
        json = JSON.toJSONString(obj);
        System.out.println(json);
        //{"orderId":1000,"orderStatus":"支付中"}
    }
}
posted @ 2023-04-10 20:27  进击的小蔡鸟  阅读(129)  评论(0编辑  收藏  举报