如何将JSON字段名称映射到不同的对象字段名称?
以下jax-b注释的Jackson json注释中的equiv方式是什么?如何将JSON字段名称映射到不同的对象字段名称?
我需要生成json而不是xml,并且需要知道在jax-b中等效表示的常规jackson注释。
- 重命名一个字段。
- 使用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_;}
}
也许这是一个有点晚但是无论如何..
你可以重命名属性只是加入
@JsonProperty("contractor")
默认情况下,Jackson使用getter和setter来序列化和反序列化。
我可以在已使用** @ 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
是的,虽然它是否有效取决于包含AnnotationIntrospector的优先级(Jackson自己的vs JAXB)。两者都会被检测到,但是一个优先级更高的“获胜”。 – StaxMan 2015-03-20 19:10:13
谢谢@StaxMan的提示。我使用[编译器](这里)(http://wiki.fasterxml.com/AnnotationIntrospector)来设置优先级 – aheryan 2016-03-15 18:00:52
不'@XmlElement(NAME = “新”)'不适合你?我只是在一个Jersey servlet(使用Jackson)上尝试过它,它运行良好。 – Danny 2012-03-16 16:50:38
我正在使用RestyGWT - 我认为该功能在RestyGWT中找不到,因此在尝试/建议提交修补程序之前,我需要知道jackson equiv。 – 2012-03-16 17:05:16
感谢@BlessedGeek提示。更多信息可以在http://wiki.fasterxml.com/AnnotationIntrospector 发现尽管链接中的方法有点旧了,我使用这段代码来设置序列化器/解串器的优先级。 objectMapper.setAnnotationIntrospector( 新AnnotationIntrospectorPair( 新JacksonAnnotationIntrospector(), 新JaxbAnnotationIntrospector() ) ); – aheryan 2016-03-15 17:56:05