Ali*_*Ali 160 java jquery hibernate jquery-ui jackson
我正在使用杰克逊将我的一个物体转换为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; }
}
Run Code Online (Sandbox Code Playgroud)
由于我想在jQuery自动完成功能中使用它,我希望'id'在json中显示为'value','name'显示为'label'.杰克逊的文档不明确这一点,我已经想尽注释,甚至远程好像它做什么,我需要,但我不能让name显示为label,并id显示为value在JSON.
有谁知道如何做到这一点,或者这是否可能?
hen*_*ren 309
你尝试过使用@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; }
}
Run Code Online (Sandbox Code Playgroud)
m3t*_*man 44
请注意org.codehaus.jackson.annotate.JsonPropertyJackson 1.x和com.fasterxml.jackson.annotation.JsonPropertyJackson 2.x中有.检查您正在使用的ObjectMapper(从哪个版本),并确保使用正确的注释.
Vla*_*cea 11
如果您使用的是 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
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
Dim*_* II 10
还有一个选项可以重命名字段:
如果你处理你无法注释的第三方课程,或者你只是不想用杰克逊特定的注释污染课程,这很有用.
Mixins的Jackson文档已经过时,因此这个例子可以提供更清晰的信息.本质上:您创建mixin类,以您想要的方式进行序列化.然后将其注册到ObjectMapper:
objectMapper.addMixIn(ThirdParty.class, MyMixIn.class);
Run Code Online (Sandbox Code Playgroud)