Jackson的依赖
编写Jackson工具类:https://my.oschina.net/lion1220/blog/3151031
Jackson常用注解
1、属性包含
1)@JsonProperty:此注解作用于属性上,作用是把该属性的名称序列化成另一个自己想要的名称
对属性名进行重命名,支持驼峰和下划线
2)@JsonInclude(JsonInclude.Include.NON_EMPTY)
假设数据库查出来为null,那么data就是null,执行sql是没问题的,success返回true。
由于类上面定义了@JsonInclude(JsonInclude.Include.NON_EMPTY),所以data为null是不会在序列化结果中显示的。
前端获取的返回结果:{“success”:true},后面的js代码直接拿data报错,因为data根本不存在。
@JsonInclude(JsonInclude.Include.NON_NULL)
数据库是没查到数据,但是data这个属性还是要返回的,
因为这是前端js获取数据的唯一字段,可以在没数据的情况下返回一个空的data(数组长度为零,但不为null)。
JsonInclude.Include.NON_EMPTY:属性为空或者null都不参与序列化。
JsonInclude.Include.NON_NULL:属性为null不参与序列化。
3)@JsonAutoDetect:定义默认的字段包含规则
4)@JsonIgnore注解用于属性或者方法上,用来完全忽略被注释的字段和方法对应的属性,即便这个还有其它注解,
一般标记在属性或者方法上,返回的json数据不包含被该注解引用的属性或者方法
5)@JsonIgnoreProperties可以帮我们忽略类中不存在的字段
例如:@JsonIgnoreProperties(ignoreUnknown = true)
还可以指定忽略类中多个字段在类被转成json的格式忽略掉
6)@JsonIgnoreType:修饰类,忽略指定的类型的字段
2、反序列化和序列化的细节
1)@JsonFormat可以帮助我们完成格式转换
例如:
@JsonFormat(timezone=”GTM+8″,pattern=”yyyy-MM-dd HH:mm:ss”)
private Date createDate;
2)@JsonUnwrapped:指定某个字段(类型是POJO)序列化成扁平化,而不是嵌套对象,在反序列化时再包装成对象
如:@JsonUnwrapped(prefix = “pre_”, suffix = “_suf”)
3)@JsonView:可以定义视图
3、字段文档,元数据
1)@JsonPropertyDescription:2.3支持,给字段配置人类阅读的解释
4、反序列化细节
1)@JsonDeserialize
2)@JsonAlias
3)@JacksonInject:指示某个字段的值是注入的,而不是从JSON中取出的
4)@JsonAnySetter:修饰一个2个参数的方法,任何JSON中有,而对象中没有的字段都会以(key,value)的形式传给这个方法
5)@JsonCreator:上篇文章自定义构造方法介绍过了
6)@JsonSetter:是@JsonProperty的替代注解
7)@JsonEnumDefaultValue:反序列化时,如果遇到未定义的枚举值时,赋值为默认枚举
5、序列化细节
1)@JsonSerialize
2)@JsonAnyGetter:修饰一个方法,返回Map,这个方法的返回值会被序列化成(key,value)形式
3)@JsonGetter:@JsonPropert的替代注解
4)@JsonPropertyOrder:注定序列化的顺序
5)@JsonRawValue:被修饰的字段“准确”的显示出来,没有转义或装饰,双引号都不加
6)@JsonValue:指定序列化输出的值
7)@JsonRootName:使用这个指定的值作为JSON的根,前提是SerializationFeature.WRAP_ROOT_VALUE已经打开了
@JsonManagedReference, @JsonBackReference
@JsonIdentityInfo
@JsonFilter 该注解可以在序列化时指定一个过滤器
@JsonAppend
@JsonNaming
@JsonPOJOBuilder
@JsonTypeId
@JsonProperty 这个注解提供了序列化和反序列化过程中该java属性所对应的名称
@JsonAlias 这个注解只只在反序列化时起作用,指定该java属性可以接受的更多名称