我正在使用Jackson ObjectMapper
转换为JSON字符串。我想使用PropertyNamingStrategy
,以便为我的字段指定不同的名称。
例如:attribute ---> 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
属性中的值转换为短名称。例如:
accessPolicyIDs --> acp, maxOfInstances --> mxi
如何实现?
可以ObjectMapper
配置为处理特定字段的值吗?
答案 0 :(得分:1)
您可以尝试创建自定义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
}
}
要使用此序列化程序,请将其添加到mapper:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(new CustomValueSerializer());
mapper.registerModule(module);
String jsonString = mapper.writeValueAsString(person);
此外,如果您有权访问pojo,则可以使用注释标记Name
属性:
@JsonProperty
@JsonSerialize(using = CustomValueSerializer.class)
public String getName(){
return name;
}