Java 字段值上的Jackson Objectmapper?
我正在使用JacksonJava 字段值上的Jackson Objectmapper?,java,json,jackson,objectmapper,Java,Json,Jackson,Objectmapper,我正在使用JacksonObjectMapper转换为JSON字符串。我想使用PropertyNamingStrategy,以便可以为我的字段指定不同的名称 例如:属性-->attr,name-->nm OBJECT MAPPER:---> JSON STRING: { "attribute" : [ { "name" : "accessPolicyIDs", "value" : "R400" }, { "name" : "maxOfInstances",
ObjectMapper
转换为JSON字符串。我想使用PropertyNamingStrategy
,以便可以为我的字段指定不同的名称
例如:属性-->attr,name-->nm
OBJECT MAPPER:---> JSON STRING:
{
"attribute" : [ {
"name" : "accessPolicyIDs",
"value" : "R400"
}, {
"name" : "maxOfInstances",
"value" : "10"
} ]
}
我可以通过以下课程来实现这一点:
public class LongNameShortNameNamingStrategy extends PropertyNamingStrategyBase {
@Override
public String translate(String propertyName) {
String shortName = null;
shortName = LongNameShortNames.getShortName(propertyName);
if (shortName != null){
return shortName;
}
return propertyName;
}
}
但是,现在需要将name
属性中的值也转换为短名称。前任:
accessPolicyId-->acp,maxOfInstances-->mxi
如何才能做到这一点??
是否可以将
ObjectMapper
配置为处理特定字段的值???您可以尝试创建自定义ValueSerializer。
比如:
public class CustomValueSerializer extends JsonSerializer<String> {
@Override
public void serialize(String s, JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
if(jsonGenerator.getOutputContext().getCurrentName().equals("name")){
s = getShortName(s);
}
jsonGenerator.writeString(s);
}
@Override
public Class<String> handledType() {
return String.class;
}
private String getShortName(String s){
//make string short
}
}
此外,如果您有权访问pojo,则可以使用注释标记Name
属性:
@JsonProperty
@JsonSerialize(using = CustomValueSerializer.class)
public String getName(){
return name;
}
为什么不使用@JsonProperty()更改字段名?我的POJO无法编辑。因此使用了
NamingStrategy
。我需要更改name
字段的值。这是一个奇怪的要求,我认为如果不能修改对象类,可以使用自定义序列化器/反序列化器来实现。
@JsonProperty
@JsonSerialize(using = CustomValueSerializer.class)
public String getName(){
return name;
}