• jackson中@JsonProperty、@JsonIgnore等常用注解总结


    最近用的比较多,把json相关的知识点都总结一下,jackjson的注解使用比较频繁,

    jackson的maven依赖

    <dependency> 
        <groupId>com.fasterxml.jackson.core</groupId> 
            <artifactId>jackson-databind</artifactId> 
        <version>2.5.3</version>
    </dependency>

    在这单独总结一下,最近常用到的注解。

    1.@JsonProperty :此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty("name")。 

    对属性名称重命名,比如在很多场景下Java对象的属性是按照规范的驼峰书写,但在数据库设计时使用的是下划线连接方式,此处在进行映射的时候

    就可以使用该注解。

    例如:使用该注解将以下表结构转化为Javabean:

    public class CustomerInfo{
        
        private int id;
    
        //使用 @JsonProperty注解将表结构中的字段映射到实体类中
        @JsonProperty("customer_name")
        private String customerName;
        
        @JsonProperty("customer_id")
        private String customerId;
        
        @JsonProperty("product_id")
        private String productId;
        
        @JsonProperty("source_address")
        private String sourceAddress;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getCustomerName() {
            return customerName;
        }
    
        public void setCustomerName(String customerName) {
            this.customerName = customerName;
        }
    
        public String getCustomerId() {
            return customerId;
        }
    
        public void setCustomerId(String customerId) {
            this.customerId = customerId;
        }
    
        public String getProductId() {
            return productId;
        }
    
        public void setProductId(String productId) {
            this.productId = productId;
        }
    
        public String getSourceAddress() {
            return sourceAddress;
        }
    
        public void setSourceAddress(String sourceAddress) {
            this.sourceAddress = sourceAddress;
        }
    }

    2.@JsonIgnore此注解用于属性或者方法上(最好是属性上),用来完全忽略被注解的字段和方法对应的属性,即便这个字段或方法可以被自动检测到或者还有其

    他的注解,一般标记在属性或者方法上,返回的json数据即不包含该属性。

    使用情景:需要把一个List<CustomerInfo >转换成json格式的数据传递给前台。但实体类中基本属性字段的值都存储在快照属性字段中。此时我可以在业务层中做处理,

    把快照属性字段的值赋给实体类中对应的基本属性字段。最后,我希望返回的json数据中不包含这两个快照字段,那么在实体类中快照属性上加注解@JsonIgnore,

    那么最后返回的json数据,将不会包含customerIdproductId两个属性值。

    public class CustomerInfo {
        
        private int id;
        
        //使用 @JsonIgnore注解在生成json数据时,忽略该字段
        
        private String customerName;
        
        @JsonIgnore
        private String customerId;
        
        @JsonIgnore
        private String productId;
        
        private String sourceAddress;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getCustomerName() {
            return customerName;
        }
    
        public void setCustomerName(String customerName) {
            this.customerName = customerName;
        }
    
        public String getCustomerId() {
            return customerId;
        }
    
        public void setCustomerId(String customerId) {
            this.customerId = customerId;
        }
    
        public String getProductId() {
            return productId;
        }
    
        public void setProductId(String productId) {
            this.productId = productId;
        }
    
        public String getSourceAddress() {
            return sourceAddress;
        }
    
        public void setSourceAddress(String sourceAddress) {
            this.sourceAddress = sourceAddress;
        }
    }

    3.@JsonIgnoreProperties此注解是类注解,作用是json序列化时将java bean中的一些属性忽略掉,序列化和反序列化都受影响。

    4.@JsonFormat此注解用于属性或者方法上(最好是属性上),可以方便的把Date类型直接转化为我们想要的模式。

    例子:@JsonFormat(pattern="yyyy-MM-dd hh:mm:ss")

    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    5.@JsonSerialize此注解用于属性或者getter方法上,用于在序列化时嵌入我们自定义的代码,比如序列化一个double时在其后面限制两位小数点。

    6.@JsonDeserialize此注解用于属性或者setter方法上,用于在反序列化时可以嵌入我们自定义的代码,类似于上面的@JsonSerialize。

    7.@JsonInclude 属性值为null的不参与序列化。例子:@JsonInclude(Include.NON_NULL)

  • 相关阅读:
    Memcached:高性能的分布式内存缓存服务器
    MySQL数据库Query的优化
    MySQL数据库的锁定机制及优化
    系统架构及实现对性能的影响(一)
    Mysql数据库的基本结构和存储引擎简介
    Spring事务管理的回滚
    穷举算法实例
    在写完全二叉树的构建及遍历
    Inotify
    Rsync扩展
  • 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/12024808.html
Copyright © 2020-2023  润新知