1

I hava a custom serializer for a field.

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());

}
}

its value decide if the field name to change,so I don't know how to hand this. using jackson 2.9.0 Thanks!

FakeAlcohol
  • 860
  • 7
  • 28

1 Answers1

1

Take a look at this

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));
}

[Source]

Jackson dynamic property names

Naruto
  • 4,221
  • 1
  • 21
  • 32