2012-03-16 162 views
28

以下jax-b注释的Jackson json注释中的equiv方式是什么?如何将JSON字段名称映射到不同的对象字段名称?

我需要生成json而不是xml,并且需要知道在jax-b中等效表示的常规jackson注释。

  1. 重命名一个字段。
  2. 使用getters而不是字段。

这些功能如果JSON/XML元素名称是一个java的保留字 像“new”,“public”尤为重要,“static”等

所以我们必须命名POJO字段分别为“_new_”,“_public_”,“_static_”等,

但使用jax-b注释将它们重新命名为“新”,“公共”,“静态”等 生成的XML(和json)元素。

重命名场

@XmlAccessorType(XmlAccessType.FIELD) 
public class Person{ 
    @XmlElement(required = true) 
    protected String name; 
    @XmlElement(required = true) 
    protected String address; 
    @XmlElement(name = "contractor") 
    protected boolean _restricted_ ; 
    @XmlElement(name = "new") 
    protected boolean _new_ ; 
} 

重定向到使用属性的getter(我觉得这是它是如何在JAX-B完成)

@XmlAccessorType(XmlAccessType.PROPERTY) 
public class Person{ 
    protected String name; 
    protected String address; 
    protected boolean _restricted_ ; 
    protected boolean _new_ ; 

    @XmlElement(required = true) 
    protected String getName() {return name;} 
    @XmlElement(required = true) 
    protected String getAddress() {return address;} 
    @XmlElement(name = "contractor") 
    protected boolean getRestricted() {return _restricted_;} 
    @XmlElement(name = "new") 
    protected boolean getNew(){return _new_;} 
} 
+0

不'@XmlElement(NAME = “新”)'不适合你?我只是在一个Jersey servlet(使用Jackson)上尝试过它,它运行良好。 – Danny 2012-03-16 16:50:38

+0

我正在使用RestyGWT - 我认为该功能在RestyGWT中找不到,因此在尝试/建议提交修补程序之前,我需要知道jackson equiv。 – 2012-03-16 17:05:16

+0

感谢@BlessedGeek提示。更多信息可以在http://wiki.fasterxml.com/AnnotationIntrospector 发现尽管链接中的方法有点旧了,我使用这段代码来设置序列化器/解串器的优先级。 objectMapper.setAnnotationIntrospector( 新AnnotationIntrospectorPair( 新JacksonAnnotationIntrospector(), 新JaxbAnnotationIntrospector() ) ); – aheryan 2016-03-15 17:56:05

回答

69

也许这是一个有点晚但是无论如何..

你可以重命名属性只是加入

@JsonProperty("contractor") 

默认情况下,Jackson使用getter和setter来序列化和反序列化。

更多详细信息:http://wiki.fasterxml.com/JacksonFAQ

+2

我可以在已使用** @ XmlElement **进行注释的类Person中使用此** @ JsonProperty **注释吗?我尝试覆盖像这样的属性的值: '@JsonProperty(value =“json_Name”) @XmlElement(name =“name_provider”) public String getName(){ return name; }' }但是无论如何,我的名字的值是** name_provider **,而不是** json_Name ** – Nikolas 2014-09-18 12:08:39

+2

是的,虽然它是否有效取决于包含AnnotationIntrospector的优先级(Jackson自己的vs JAXB)。两者都会被检测到,但是一个优先级更高的“获胜”。 – StaxMan 2015-03-20 19:10:13

+0

谢谢@StaxMan的提示。我使用[编译器](这里)(http://wiki.fasterxml.com/AnnotationIntrospector)来设置优先级 – aheryan 2016-03-15 18:00:52

相关问题