关于字段值的 Jackson Objectmapper?
Jackson Objectmapper on value of field?
我正在使用 Jackson ObjectMapper
转换为 JSON 字符串。我想使用 PropertyNamingStrategy
以便可以为我的字段指定不同的名称。
例如:attribute ---> attr, name --> nm
OBJECT MAPPER:---> JSON STRING:
{
"attribute" : [ {
"name" : "accessPolicyIDs",
"value" : "R400"
}, {
"name" : "maxOfInstances",
"value" : "10"
} ]
}
我可以通过以下方式实现这一点 class:
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
可以配置为处理特定字段的值吗??
您可以尝试创建自定义 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
}
}
要使用此序列化程序,请将其添加到映射器:
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;
}
我正在使用 Jackson ObjectMapper
转换为 JSON 字符串。我想使用 PropertyNamingStrategy
以便可以为我的字段指定不同的名称。
例如:attribute ---> attr, name --> nm
OBJECT MAPPER:---> JSON STRING:
{
"attribute" : [ {
"name" : "accessPolicyIDs",
"value" : "R400"
}, {
"name" : "maxOfInstances",
"value" : "10"
} ]
}
我可以通过以下方式实现这一点 class:
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
可以配置为处理特定字段的值吗??
您可以尝试创建自定义 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
}
}
要使用此序列化程序,请将其添加到映射器:
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;
}