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;
}
7 枚举指定值
枚举默认是返回枚举名称作为键名,如果要将其他属性作为枚举字段的键名,则需要在这个枚举结构里面用@JsonValue指定,如:
public enum CATEGORY{
    STATUS("S"),
    ASS("A"),
    PUR("P"),
    MAIN("M");
    private String _val;
    private static final Map<String,CATEGORY> keyMap=new HashMap<String,CATEGORY>();
    static {
      for (CATEGORY c:CATEGORY.values()){
        keyMap.put(c._val,c);
      }
    }
    CATEGORY(String s) {
      this._val=s;
    }
    @JsonValue
    public String getValue(){
      return _val;
    }
    public static CATEGORY fromValue(String value){
      return keyMap.get(value);
    }
  }

参考:
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
Java中,注解(Annotations)是一种元数据,它们提供了一种为源代码添加额外信息的方式,这些信息可以被编译器、工具或运行时环境使用。Java开发中常用的注解主要包括以下几个类别: 1. **编译时注解**: - `@Override`: 表示方法重写父类的方法,编译器会检查是否真的覆盖了基类的方法。 - `@Deprecated`: 标记为过时的方法或字段,提醒开发者应该替换为其他功能。 - `@SuppressWarnings`: 忽略特定的编译器警告。 2. **访问控制注解**: - `@VisibleForTesting`: 通常用于测试代码中,标记部分代码为只对测试可见。 - `@PackagePrivate`: 对于包级别的可见性,限制在同一个包内的类可以访问。 3. **类型安全注解**: - `@Autowired`: Spring框架中的注解,用于自动装配bean。 - `@FunctionalInterface`: 定义函数式接口,表明该接口只有一个抽象方法。 4. **编译期和运行期注解处理器(Annotation Processors)**: - `@Retention`: 指定注解应该在哪些阶段保留,如SOURCE(源代码级别)、CLASS(编译后)或RUNTIME(运行时)。 - `@Target`: 指定注解可以应用到哪些元素,如TYPE、FIELD、METHOD等。 5. **JPA注解**: - `@Entity`: 表示持久化实体类。 - `@Table`: 定义表映射相关的属性。 - `@Column`: 定义数据库列的映射。 6. **JSON注解**: - `@JsonProperty`: Jackson框架用来标记JSON属性的注解。 - `@JsonInclude`: 控制哪些字段在序列化或反序列化时包含或忽略。 7. **日志注解**: - `@Log4j2`: 使用Log4j2时,标记需要记录的日志点。 相关问题--: 1. Java中的`@Deprecated`注解有什么作用? 2. `@Autowired`注解在Spring框架中的具体用途是什么? 3. 如何在Java中创建自定义注解并使用注解处理器?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值