• 多个@JsonProperty操作同一个属性


    @JsonProperty

    首先这个注解是干嘛的呢,(用于JSON之间解析与传递)

    • 可以作用在属性上,给该属性序列化为另一个名称(别名),主要用来序列化和反序列化;

    • 当前端传json字符串,将会把json字符串反序列化为对象,会自动赋值对应的字段值

    • 当后端接口响应前端对象返回json字符串,将会把对象序列化为json字符串,json字符串的属性名为@JsonProperty指定的名称(别名)
    @Data
    @ToString
    public class User {
    
        private Integer userId;
        // JSON 接受创建对象 属性是:userName
        // 给前端返回 属性是:userName
        @JsonProperty("userName")
        private String name1;
    }

    接下来说一下我的需求场景,需求是:2个JSON属性名 对应一个属性,问了一下项目组大佬,直接贴代码

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public class ExtraInfoDTO {
        private String fieldName;
    
        private String fieldText;
    
        @JsonProperty("fieldValue")
        public void setFieldValue(String fieldValue){
            this.fieldText = fieldValue;
        }
    
        @JsonProperty("fieldText")
        public void setFieldText(String fieldText){
            this.fieldText = fieldText;
        }
    
        // 测试
        public static void main(String[] args) {
            String json = "{'fieldName':'a','fieldText':'b'}";
            ObjectMapper objectMapper = new ObjectMapper();
            try {
                ExtraInfoDTO extraInfoDTO = objectMapper.readValue(json, ExtraInfoDTO.class);
                System.out.println(extraInfoDTO);
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    • 证明该注解可以作用在方法上

    总结:

    1. 本人理解这个注解作用在属性上,那么该属性的Get/Set方法则是注解内名字所对应生成的 (Class文件内set方法上注解就是该属性上@JsonProperty)
    2. 作用在方法上,那么就是根据json属性名调用的同名@JsonProperty(xxxx) setxxx方法的逻辑。
  • 相关阅读:
    Linux上查找
    Linux进程
    Linux重定向
    Linux上常用的基本命令
    LInux上返回到切换目录前的目录
    【网络知识之一】4/7层网络模型
    【操作系统之十五】iptables黑白名单、自定义链、网络防火墙、常用动作
    【操作系统之十四】iptables扩展模块
    【操作系统之十三】Netfilter与iptables
    【操作系统之十二】分支预测、CPU亲和性(affinity)
  • 原文地址:https://www.cnblogs.com/yi1036943655/p/15630910.html
Copyright © 2020-2023  润新知