
文章插图
1. 概述在本文中,我们将深入研究Jackson注解 。
我们将看到如何使用现有的注释,如何创建自定义的注释,最后—如何禁用它们 。
2. Jackson序列化注解首先,我们将查看序列化注释 。
2.1. @JsonAnyGetter@JsonAnyGetter注释允许灵活地使用映射字段作为标准属性 。
下面是一个快速的例子——ExtendableBean实体拥有name属性和一组可扩展属性,它们以键/值对的形式存在:
public class ExtendableBean {public String name;private Map<String, String> properties;@JsonAnyGetterpublic Map<String, String> getProperties() {return properties;}}当我们序列化这个实体的一个实例时,我们会得到Map中所有的键值作为标准的普通属性:{"name":"My bean","attr2":"val2","attr1":"val1"}这里是如何序列化这个实体看起来像在实践:@Testpublic void whenSerializingUsingJsonAnyGetter_thenCorrect()throws JsonProcessingException {ExtendableBean bean = new ExtendableBean("My bean");bean.add("attr1", "val1");bean.add("attr2", "val2");String result = new ObjectMApper().writeValueAsString(bean);assertThat(result, containsString("attr1"));assertThat(result, containsString("val1"));}我们还可以使用可选参数enabled为false来禁用@JsonAnyGetter() 。在本例中,映射将被转换为JSON,并在序列化之后出现在properties变量下 。2.2. @JsonGetter@JsonGetter注释是@JsonProperty注释的替代品,它将方法标记为getter方法 。
在下面的例子中-我们指定getTheName()方法作为MyBean实体的name属性的getter方法:
public class MyBean {public int id;private String name;@JsonGetter("name")public String getTheName() {return name;}}这是如何在实践中运作的:@Testpublic void whenSerializingUsingJsonGetter_thenCorrect()throws JsonProcessingException {MyBean bean = new MyBean(1, "My bean");String result = new ObjectMapper().writeValueAsString(bean);assertThat(result, containsString("My bean"));assertThat(result, containsString("1"));}2.3. @JsonPropertyOrder我们可以使用@JsonPropertyOrder注释来指定序列化时属性的顺序 。让我们为MyBean实体的属性设置一个自定义顺序:
@JsonPropertyOrder({ "name", "id" })public class MyBean {public int id;public String name;}这是序列化的输出:{"name":"My bean","id":1}还有一个简单的测试:@Testpublic void whenSerializingUsingJsonPropertyOrder_thenCorrect()throws JsonProcessingException {MyBean bean = new MyBean(1, "My bean");String result = new ObjectMapper().writeValueAsString(bean);assertThat(result, containsString("My bean"));assertThat(result, containsString("1"));}我们还可以使用@JsonPropertyOrder(alphabetic=true)按字母顺序排列属性 。在这种情况下,序列化的输出将是:{"id":1,"name":"My bean"}2.4.
推荐阅读
- 华硕主板后缀字母代表什么含义?华硕主板型号命名规则与系列详解
- 决明子菊花茶详解,决明子菊花茶的做法
- Apollo配置中心管理后台的详解
- 教你紫砂壶的保养方法,详解紫砂壶冲泡普洱茶的方法
- 一文详解,PHP 协程:Go + Chan + Defer
- Serverless无服务器架构详解
- Docker---Dockerfile 详解
- 金边玫瑰茶的禁忌,详解玫瑰花茶的功效
- Linux常用监视和故障排查命令详解
- 详解Java面向对象开发,给你不一样的体验
