2011-08-31 102 views
103

我正在使用jackson将我的对象转换为json。 对象有2个字段:使用Jackson更改JSON中的字段名称

@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的自动完成功能,我想“身份证”,以显示为JSON“价值”和“名称”显示为“标签” 。杰克逊的文档不清楚,我已经尝试了每个注释,甚至远程似乎它是我需要的,但我不能让name显示为labelid在json中显示为value

有谁知道如何做到这一点,或者如果这是可能的?

+0

if如果您曾经想将实体(“城市”)用于任何其他目的或商业逻辑,我会避免将其JSON表示定义为标签和值。 OTOH如果这纯粹是用于组合的参考数据,那么您可能会有更多 - 使通用实体(Pair或Option)涵盖所有这些是可能的方法来考虑。 –

回答

214

您是否尝试过使用@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; } 
} 
+3

是的,我曾尝试过,但是我在做'@JsonProperty(value =“label”)',它不工作,我按照您的建议尝试了它,它的工作原理!谢谢,这真的有助于简化代码。 – Ali

+0

我有类似的要求。只是我在RESTEasy中使用Jackson,这不起作用: - /奇怪! – Nikhil

+0

验证杰克逊真的是配置的提供者,而不是别的 –

27

要知道,有杰克逊的1.x org.codehaus.jackson.annotate.JsonPropertycom.fasterxml.jackson.annotation.JsonProperty杰克逊2.x版本检查您使用的是哪个ObjectMapper(从哪个版本开始),并确保使用正确的注释。

5

还有一个选项来重场:

Jackson MixIns

如果您处理第三方课程,这很有用,您是无法注释,或者您只是不想用Jackson特定的注释污染该课程。