Make Jackson serializer override specific ignored fields Make Jackson serializer override specific ignored fields json json

Make Jackson serializer override specific ignored fields


You can use MixIn feature:

import com.fasterxml.jackson.annotation.JsonIgnore;import com.fasterxml.jackson.annotation.JsonProperty;import com.fasterxml.jackson.databind.ObjectMapper;import com.fasterxml.jackson.databind.SerializationFeature;public class JsonApp {    public static void main(String[] args) throws Exception {        ObjectMapper mapper = new ObjectMapper();        mapper.enable(SerializationFeature.INDENT_OUTPUT);        mapper.addMixIn(MyClass.class, MyClassMixIn.class);        System.out.println(mapper.writeValueAsString(new MyClass()));    }}interface MyClassMixIn {    @JsonProperty    String getField2();}

Above code prints:

{  "field1" : "F1",  "field2" : "F2",  "field3" : "F3"}


You could use a custom serializer, like so (I leave the refactoring up to you):

private String getJson(final MyClass obj) {    final ObjectMapper om = new ObjectMapper();    om.registerModule(new SimpleModule(            "CustomModule",            Version.unknownVersion(),            Collections.emptyMap(),            Collections.singletonList(new StdSerializer<MyClass>(MyClass.class) {                @Override                public void serialize(final MyClass value, final JsonGenerator jgen, final SerializerProvider provider) throws IOException {                    jgen.writeStartObject();                    jgen.writeStringField("field1", value.field1);                    jgen.writeStringField("field2", value.field2);                    jgen.writeStringField("field3", value.field3);                    jgen.writeEndObject();                }            })));    try {        return om.writeValueAsString(obj);    } catch (final JsonProcessingException e) {        throw new RuntimeException(e);    }}

You can find more information about custom serializers on google/stackoverflow, I think I answered something similar here