Java 如何将JSON字段名映射到不同的对象字段名?
对于以下jax-b注释,Jackson json注释中的等价方式是什么 我需要生成json而不是xml,并且需要了解jax-b中等价表示的传统jackson注释Java 如何将JSON字段名映射到不同的对象字段名?,java,xml,json,annotations,jackson,Java,Xml,Json,Annotations,Jackson,对于以下jax-b注释,Jackson json注释中的等价方式是什么 我需要生成json而不是xml,并且需要了解jax-b中等价表示的传统jackson注释 重命名字段 使用getter而不是字段 如果json/xml元素名是java保留字,则这些特性尤其重要 如“新建””、“公共””、“静态””等 因此,我们必须将POJO字段分别命名为“_new_uu”,“_public_uuu”,“_static_uu”,等等 但是使用jax-b注释将它们重新命名为“new”、“public”、“sta
新建”
”、“公共”
”、“静态”
”等
因此,我们必须将POJO字段分别命名为“_new_uu”,“_public_uuu”,“_static_uu”,等等
但是使用jax-b注释将它们重新命名为“new”、“public”、“static”等
在生成的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中就是这样做的)可能有点晚了,但无论如何 只需添加属性,即可重命名属性
@JsonProperty("contractor")
默认情况下,Jackson使用getter和setter来序列化和反序列化
有关更多详细信息:举个例子,还可以在getter和setter中使用它将其重命名为其他字段
public class Sample {
private String fruit;
@JsonProperty("get_apple")
public void setFruit(String fruit) {
this.fruit = fruit;
}
@JsonProperty("send_apple")
public String getFruit() {
return fruit;
}
}
请注意,正确的JavaEEAPI是使用
javax.json.bind.annotation.JsonbProperty
注释。当然,Jackson和其他人只是JSON绑定API的一些实现,他们可能会遵守这一点。如果您不使用Jackson,仍然希望重命名属性,您可以使用@SerializedName(“您的原始密钥名称”)
我的JSON数据:
{
"default": "0"
}
正如您所知,我们从不使用预定义关键字作为变量名,因此解决方案是:
@SerializedName("default")
private String default_value;
public String getDefault_value() {
return default_value;
}
public void setDefault_value(String default_value) {
this.default_value = default_value;
}
这就是您现在要做的所有事情。值来自键“default”,您可以使用“default\u值”将其与getter和setter一起使用
在这种情况下(Predifind关键字作为Json键名),或者在任何其他情况下,您希望更改变量名以从原始键名获取数据,这是最简单的方法。是否
@xmlement(Name=“new”)
不适合您?我刚刚在Jersey servlet(使用Jackson)上试用过,效果很好。我正在使用RestyGWT-我认为该功能在RestyGWT中找不到,因此在尝试/提议提交补丁之前,我需要知道Jackson等价物。感谢@BlessedGeek的提示。更多信息可以在上找到,尽管链接中的方法有点旧,但我正在使用此代码设置序列化器/反序列化器的优先级。setAnnotationIntrospector(新的AnnotationIntrospector对(新的JacksonAnnotationIntrospector(),新的JaxbAnnotationIntrospector());我可以在已经用@XmlElement注释的类Person中使用这个@JsonProperty注释吗?我试图重写如下属性的值:@JsonProperty(value=“json_Name”)@xmlement(Name=“Name_provider”)公共字符串getName(){return Name;}
,但无论如何,我的名称值是Name_provider,而不是json_NameYes,尽管它是否有效取决于所包含的“AnnotationIntrosector”的优先级(Jackson自己的vs JAXB)。两者都将被检测到,但其中一个以更高优先级“wins”注册。感谢@StaxMan的提示。我用找到的编码设置优先级
@SerializedName("default")
private String default_value;
public String getDefault_value() {
return default_value;
}
public void setDefault_value(String default_value) {
this.default_value = default_value;
}