Jersey Jackson JSON 属性全局更改
Jersey Jackson JSON attribute change globally
我有一个场景,如果 POJO 中有一个 XML 属性(定义为 @XmlAttribute
),那么它应该在 JSON 输出中以不同的方式命名。
@XmlAttribute(name = "value")
//@JsonProperty("value-new")
protected String value;
现在我可以使用@JsonProperty
来定义新名称了。但是我在每个 POJO 中都有很多这样的属性,最后需要对所有这些属性进行名称更改 "common"(比如添加 -new)。是否可以在全球范围内执行此操作?
您可以实现自己的 PropertyNamingStrategy
。
class XmlAttributePropertyNamingStrategy extends PropertyNamingStrategy {
@Override
public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
XmlAttribute annotation = field.getAnnotation(XmlAttribute.class);
if (annotation != null) {
return defaultName + "-new";
}
return super.nameForField(config, field, defaultName);
}
}
您可以如下使用它:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); // enable fields
mapper.setVisibility(PropertyAccessor.GETTER, Visibility.NONE); // disable getters
mapper.setPropertyNamingStrategy(new XmlAttributePropertyNamingStrategy());
System.out.println(mapper.writeValueAsString(new Pojo()));
因为 XmlAttribute
注释在字段级别可用,我们需要启用字段可见性并禁用 getter。对于以下 POJO
:
class Pojo {
@XmlAttribute
private String attr = "Attr";
private String value = "Value";
// getters, setters
}
以上示例打印:
{"attr-new":"Attr","value":"Value"}
我有一个场景,如果 POJO 中有一个 XML 属性(定义为 @XmlAttribute
),那么它应该在 JSON 输出中以不同的方式命名。
@XmlAttribute(name = "value")
//@JsonProperty("value-new")
protected String value;
现在我可以使用@JsonProperty
来定义新名称了。但是我在每个 POJO 中都有很多这样的属性,最后需要对所有这些属性进行名称更改 "common"(比如添加 -new)。是否可以在全球范围内执行此操作?
您可以实现自己的 PropertyNamingStrategy
。
class XmlAttributePropertyNamingStrategy extends PropertyNamingStrategy {
@Override
public String nameForField(MapperConfig<?> config, AnnotatedField field, String defaultName) {
XmlAttribute annotation = field.getAnnotation(XmlAttribute.class);
if (annotation != null) {
return defaultName + "-new";
}
return super.nameForField(config, field, defaultName);
}
}
您可以如下使用它:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); // enable fields
mapper.setVisibility(PropertyAccessor.GETTER, Visibility.NONE); // disable getters
mapper.setPropertyNamingStrategy(new XmlAttributePropertyNamingStrategy());
System.out.println(mapper.writeValueAsString(new Pojo()));
因为 XmlAttribute
注释在字段级别可用,我们需要启用字段可见性并禁用 getter。对于以下 POJO
:
class Pojo {
@XmlAttribute
private String attr = "Attr";
private String value = "Value";
// getters, setters
}
以上示例打印:
{"attr-new":"Attr","value":"Value"}