Jackson常用注解介绍

 一般情况下使用JSON只使用了java对象与字符串的转换,但是,开发APP时候,我们经常使用实体类来做转换;这样,就需要用到注解;

    Jackson默认是针对get方法来生成JSON字符串的,可以使用注解来做一些特殊用途;常见的使用如下:

1 排除属性
@JsonIgnore,一般标记在属性或方法上;作用于序列化与反序列化;
@JsonIgnoreProperties,如果是代理类,由于无法标记在属性或方法上,所以,可以标记在类声明上;也作用于反序列化时的字段解析;

2 属性别名
@JsonProperty,序列化/反序列化都有效;

3 属性排序
@JsonPropertyOrder,注释在类声明中;

4 属性格式转换
使用自定义序列化/反序列化来处理;
@JsonSerialize,序列化;
@JsonDeserialize,反序列化;

注意:在使用hibernate的时候,查询数据库后产生的实体类是个代理类,这时候转换JSON会报错;
解决方法有两种:
1)设置FAIL_ON_EMPTY_BEANS属性,告诉Jackson空对象不要抛异常;
mapper.disable(SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS);
2)使用@JsonIgnoreProperties注解
在实体类声明处加上@JsonIgnoreProperties(value = {"hibernateLazyInitializer ", "handler"})注解;
建议使用@JsonIgnoreProperties注解,这样生成的JSON中不会产生多余的字段;

5 父/子关联
@JsonManagedReference,放在父亲类中;
@JsonBackReference,放在孩子类中;

6 去掉包装
@JsonUnwrapped,意思如下:
Ability to map JSON like
{
"name" : "home",
"latitude" : 127,
"longitude" : 345
}
to classes defined as:
class Place {
public String name;

@JsonUnwrapped
public Location location;
}

class Location {
public int latitude, longitude;
}

参考:
http://wiki.fasterxml.com/JacksonAnnotations
http://www.cowtowncoder.com/blog/archives/2011/10/entry_463.html
http://www.07net01.com/linux/Jacksonzhujiexuexicankao _44238_1356358422.html
Lombok提供了一系列方便的注解,使得开发者能简洁地创建常见Java元素而无需手动编写大量的样板代码。以下是Lombok中一些常用的注解: 1. `@Getter` 和 `@Setter`: 自动生成getter和setter方法,简化属性访问。例如: ```java @Data // 等同于 @NoArgsConstructor, @AllArgsConstructor, @ToString, @EqualsAndHashCode, @Getter, @Setter class User { private String name; } ``` 2. `@ToString`: 自动生成对象的字符串表示形式。 3. `@NoArgsConstructor` 和 `@AllArgsConstructor`: 分别用于生成无参构造函数和包含所有字段的全参数构造函数。 4. `@AllArgsConstructor` 或 `@NoArgsConstructor` 的变体,如 `@NoArgsConstructor`, `@RequiredArgsConstructor`, `@AllArgsConstructor` with/without varargs,允许更精细的控制构造函数参数。 5. `@Slf4j` 或 `@NonNull`: 注解用于标记日志级别和非空值,便于日志管理和null安全检查。 6. `@Builder`: 生成一个带有默认值和链式方法的构建器,方便对象的构造。 7. `@DataSuperclass` 和 `@Singular`: 提供继承和集合操作的便利性。 8. `@Value`: 类似于`@AllArgsConstructor`,但它会忽略所有`final`字段,不会生成equals, hashCode, toString方法,只保留基本类型字段。 9. `@NoArgsConstructor` 的否定形式 `@NoArgsConstructor(false)`: 可以禁用Lombok自动生成的无参构造器。 10. `@JsonInclude(JsonInclude.Include.NON_NULL)`: 对应于Jackson JSON序列化,将null值排除在外。 这些注解大大提高了Java开发的效率,但在实际应用中需谨慎使用,保持代码清晰易懂。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值