让Spring能够把作为ResponseBody返回的Java对象自动使用Jackson序列化为JSON根式
这样,只要在控制器方法上添加@ResponseBody注解(或在控制器类上添加@RestController注解),则方法返回值就会被Jackson自动序列化为JSON格式返回。
见配置文件片段:
<!-- 使用Jackson把ResponseBody编码为JSON -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter"/>
</list>
</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
常用Jackson注解解释
@JsonNaming(SnakeCaseStrategy.class)
指定Json字段名映射策略为蛇形大小写策略。缺省则直接使用Bean属性名
可用的命名映射策略还有:
KebabCaseStrategy: 肉串策略 - 单词小写,使用连字符'-'连接
SnakeCaseStrategy: 蛇形策略 - 单词小写,使用下划线'_'连接;即老版本中的LowerCaseWithUnderscoresStrategy
LowerCaseStrategy: 小写策略 - 简单的把所有字母全部转为小写,不添加连接符
UpperCamelCaseStrategy: 驼峰策略 - 单词首字母大写其它小写,不添加连接符;即老版本中的PascalCaseStrategy
@JsonIgnoreProperties({"id", "created", "steps", "copy", "stepList"})
类注解,指定序列化时忽略这些属性,可以用于覆盖超类中默认输出的属性
@JsonInclude(Include.NON_EMPTY)
仅在属性不为空时序列化此字段,对于字符串,即null或空字符串
@JsonIgnore
序列化时忽略此字段
@JsonProperty(value = "user_name")
指定序列化时的字段名,默认使用属性名
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
指定Date类字段序列化时的格式
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy年MM月dd日 HH:mm:ss", timezone = "GMT+8")
指定Date类字段序列化时的格式,shape 设置传入的值格式转换成json,pattern 时间格式,timezone处理时间少8小时问题
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")接受string类型的时间格式"yyyy-MM-dd HH:mm:ss"
@JsonUnwrapped(prefix = "user_")
private User user;
把成员对象中的属性提升到其容器类,并添加给定的前缀,比如上例中: User类中有name和age两个属性,不使用此注解则序列化为:
... "user": { "name": "xxx", "age": 22 } ...
使用此注解则序列化为:
... "user_name": "xxx", "user_age": 22, ...
@JsonIgnoreType
类注解,序列化时忽略此类
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class,property = "id")
作用于类或属性上,被用来在序列化/反序列化时为该对象或字段添加一个对象识别码,通常是用来解决循环嵌套的问题