我正在使用杰克逊将我的对象转换为 json。该对象有 2 个字段:
@Entity
public class City {
@id
Long id;
String name;
public String getName() { return name; }
public void setName(String name){ this.name = name; }
public Long getId() { return id; }
public void setName(Long id){ this.id = id; }
}
由于我想将它与 jQuery 自动完成功能一起使用,我希望“id”在 json 中显示为“值”,而“名称”则显示为“标签”。杰克逊的文档对此并不清楚,我已经尝试了每一个注释,即使是远程似乎也能满足我的需要,但我无法让 name
显示为 label
和 id
显示为 {4 } 在 json 中。
有谁知道如何做到这一点,或者这是否可能?
您是否尝试过使用@JsonProperty?
@Entity
public class City {
@id
Long id;
String name;
@JsonProperty("label")
public String getName() { return name; }
public void setName(String name){ this.name = name; }
@JsonProperty("value")
public Long getId() { return id; }
public void setId(Long id){ this.id = id; }
}
请注意,Jackson 1.x 中有 org.codehaus.jackson.annotate.JsonProperty
,Jackson 2.x 中有 com.fasterxml.jackson.annotation.JsonProperty
。检查您正在使用哪个 ObjectMapper(来自哪个版本),并确保使用正确的注释。
org.json4s.jackson
命名空间。 :) 以及可能的 jackson
YMMV 的其他实现。
还有一个重命名字段的选项:
如果您处理无法注释的第三方类,或者您只是不想用杰克逊特定的注释污染类,这很有用。
Mixins 的 Jackson 文档已过时,因此此 example 可以提供更清晰的说明。本质上:您创建 mixin 类,它以您想要的方式进行序列化。然后将其注册到 ObjectMapper:
objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);
杰克逊
如果您使用的是 Jackson,则可以使用 @JsonProperty
注释来自定义给定 JSON 属性的名称。
因此,您只需使用 @JsonProperty
注释来注释实体字段并提供自定义 JSON 属性名称,如下所示:
@Entity
public class City {
@Id
@JsonProperty("value")
private Long id;
@JsonProperty("label")
private String name;
//Getters and setters omitted for brevity
}
JavaEE 或 JakartaEE JSON-B
JSON-B 是用于将 Java 对象与 JSON 相互转换的标准绑定层。如果您使用的是 JSON-B,则可以通过 @JsonbProperty
注释覆盖 JSON 属性名称:
@Entity
public class City {
@Id
@JsonbProperty("value")
private Long id;
@JsonbProperty("label")
private String name;
//Getters and setters omitted for brevity
}
不定期副业成功案例分享
@JsonProperty(value="label")
并且它不起作用,我已经按照您的建议尝试了它并且它有效!谢谢伙计,这真的有助于简化代码。