Java 如何更改自定义json序列化程序中的属性或字段名
我有一个自定义的字段序列化程序Java 如何更改自定义json序列化程序中的属性或字段名,java,json,jackson,Java,Json,Jackson,我有一个自定义的字段序列化程序 public class SearchSerialize extends StdSerializer<Value> { public SearchSerialize() { super(Value.class); } @Override public void serialize(Value value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) t
public class SearchSerialize extends StdSerializer<Value> {
public SearchSerialize() {
super(Value.class);
}
@Override
public void serialize(Value value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
if("database".equals(jsonGenerator.getOutputContext().getCurrentName())&&"abc".equals(value.getValue()))
//change field name "database to "branchmark"
else
jsonGenerator.writeString(value.getValue());
}
}
公共类SearchSerialize扩展StdSerializer{
公共搜索序列化(){
super(Value.class);
}
@凌驾
public void serialize(Value-Value,JsonGenerator,JsonGenerator,SerializerProvider-SerializerProvider)引发IOException{
if(“database.equals”(jsongGenerator.getOutputContext().getCurrentName())和&“abc.equals”(value.getValue())
//将“字段名”数据库更改为“branchmark”
其他的
writeString(value.getValue());
}
}
它的值决定了字段名是否要更改,所以我不知道如何传递它。
使用jackson 2.9.0
谢谢!看看这个
public class Response {
private String status;
private String error;
@JsonProperty("p")
@JsonSerialize(using = CustomSerializer.class)
private Object data;
// ...
}
public class CustomSerializer extends JsonSerializer<Object> {
public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
jgen.writeStartObject();
jgen.writeObjectField(value.getClass().getName(), value);
jgen.writeEndObject();
}
}
public static void main(String... args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Response r1 = new Response("Error", "Some error", 20);
System.out.println(mapper.writeValueAsString(r1));
Response r2 = new Response("Error", "Some error", "some string");
System.out.println(mapper.writeValueAsString(r2));
}
公共类响应{
私有字符串状态;
私有字符串错误;
@JsonProperty(“p”)
@JsonSerialize(使用=CustomSerializer.class)
私有对象数据;
// ...
}
公共类CustomSerializer扩展JsonSerializer{
public void serialize(对象值、JsonGenerator jgen、SerializerProvider提供程序)引发IOException、JsonProcessingException{
jgen.writeStartObject();
jgen.writeObject字段(value.getClass().getName(),value);
jgen.writeEndObject();
}
}
公共静态void main(字符串…参数)引发异常{
ObjectMapper mapper=新的ObjectMapper();
响应r1=新响应(“错误”,“某些错误”,20);
System.out.println(mapper.writeValueAsString(r1));
响应r2=新响应(“错误”、“某些错误”、“某些字符串”);
System.out.println(mapper.writeValueAsString(r2));
}
[来源]
您不能更改名称。非常感谢