JSON库 Jackson 常用注解介绍

Jackson JSON 框架中包含了大量的注解来让我们可以干预 Jackson 的 JSON 处理过程,例如我们可以通过注解指定 java pojo 的某些属性在生成 json 时被忽略。。本文主要介绍如何使用 Jackson 提供的注解。Jackson注解主要分成三类,一是只在序列化时生效的注解;二是只在反序列化时候生效的注解;三是两种情况下都生效的注解。

一、两种情况下都有效的注解

1)、 @JsonIgnore
@JsonIgnore 用来告诉 Jackson 在处理时忽略该注解标注的 java pojo 属性,不管是将 java 对象转换成 json 字符串,还是将 json 字符串转换成 java 对象。

2)、@JsonIgnoreProperties
@JsonIgnoreProperties 和 @JsonIgnore 的作用相同,都是告诉 Jackson 该忽略哪些属性,不同之处是 @JsonIgnoreProperties 是类级别的,并且可以同时指定多个属性。这里采用和上面同样的例子,修改java pojo 如下

@JsonIgnoreProperties(value={"desc"})
public class SomeEntity {
    private String name;
    private String desc;
    //getter,setter 等省略
}

或者是指定类别:
@JsonIgnoreProperties(ignoreUnknown = true),将这个注解写在类上之后,就会忽略类中不存在的字段,可以满足当前的需要。

3)、@JsonIgnoreType
@JsonIgnoreType 标注在类上,当其他类有该类作为属性时,该属性将被忽略。

4)、@JsonProperty
@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”aaa”},而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用。

public class SomeEntity {
   @JsonProperty("user_name")
   private String userName;
     // ...
}
二、只在序列化情况下生效的注解

1)、 @JsonPropertyOrder
在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonPropertyOrder 可以指定属性在 json 字符串中的顺序。

@JsonPropertyOrder(value={"desc","name"})
public class SomeEntity {
    private String name;
    private String desc;
      //..
}

2)、 @JsonInclude
在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonInclude 注解可以控制在哪些情况下才将被注解的属性转换成 json,例如只有属性不为 null 时。

@JsonInclude(JsonInclude.Include.NON_NULL)
public class SomeEntity {
    private String name;
    private String desc;
    public SomeEntity(String name, String desc){
        this.name = name;
        this.desc = desc;
    }
}

案例说明

ObjectMapper mapper = new ObjectMapper();
SomeEntity user = new SomeEntity ("zzf",null);
String outJson = mapper.writeValueAsString(user);
System.out.println(outJson);
//测试结果
//{"name":"zzf"}
三、是在反序列化情况下生效的注解

1) 、 @JsonSetter
@JsonSetter 标注于 setter 方法上,类似 @JsonProperty ,也可以解决 json 键名称和 java pojo 字段名称不匹配的问题。

public class SomeEntity {
    private String desc;
    @JsonSetter("description")
    public void setDesc(String desc) {
        this.desc = desc;
    }
}



参考地址 :
https://blog.csdn.net/ngl272/article/details/70217104
http://blog.lifw.org/post/24921108
https://www.cnblogs.com/daxin/p/3277758.html

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JsonFormat注解Java中的一个注解,它用于指定Java对象在序列化为JSON字符串时的格式。通过在字段或方法上使用@JsonFormat注解,可以对日期、时间、数字等类型进行格式化和定制。 @JsonFormat注解有以下常用的属性: 1. pattern:指定日期、时间或数字的格式模式。例如,指定日期的格式为"yyyy-MM-dd HH:mm:ss"。 2. shape:指定日期、时间或数字的转换形式。常用的取值有: - Shape.STRING:将日期、时间或数字转换为字符串。 - Shape.NUMBER:将日期、时间或字符串转换为数值类型。 - Shape.ARRAY:将日期、时间或字符串转换为数组类型。 - Shape.OBJECT:将日期、时间或字符串转换为对象类型。 3. timezone:指定日期、时间的时区。默认情况下,使用系统默认时区。 4. locale:指定日期、时间的语言环境。默认情况下,使用系统默认语言环境。 5. lenient:指定是否宽松解析日期、时间。默认为false,即严格解析。 示例代码如下: ```java import com.fasterxml.jackson.annotation.JsonFormat; public class MyObject { @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date createTime; // getter和setter方法省略 } ``` 在上述示例中,createTime字段使用@JsonFormat注解指定了日期的格式为"yyyy-MM-dd HH:mm:ss",时区为GMT+8。在序列化为JSON字符串时,会按照指定的格式进行转换。 需要注意的是,@JsonFormat注解只对Java对象序列化为JSON字符串时有效,对于从JSON字符串反序列化为Java对象时无效。如果需要在反序列化时指定格式,可以使用@JsonDeserialize注解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值