I'm using SimpleModule to register the MixIn with Serialization and Deserialization. I am unable to make it work. The classes are shown below. WHen I print the serialized string I see the size printed and properties are not named as I specified in the mixin. It is printing {"w":5,"h":10,"size":50}. So mix-in registration with both serializer and deserialization configurations was unsuccessful. What am I doing wrong.
MixIn Class:
import org.codehaus.jackson.annotate.JsonIgnore; import org.codehaus.jackson.annotate.JsonProperty; abstract class MixIn { MixIn(@JsonProperty("width") int w, @JsonProperty("height") int h) { } @JsonProperty("width") abstract int getW(); @JsonProperty("height") abstract int getH(); @JsonIgnore abstract int getSize(); } Rectangle Class:
public final class Rectangle { final private int w, h; public Rectangle(int w, int h) { this.w = w; this.h = h; } public int getW() { return w; } public int getH() { return h; } public int getSize() { return w * h; } } Registering MixIn:
import org.codehaus.jackson.Version; import org.codehaus.jackson.map.module.SimpleModule; public class MyModule extends SimpleModule { public MyModule() { super("ModuleName", new Version(0, 0, 1, null)); } @Override public void setupModule(SetupContext context) { context.setMixInAnnotations(Rectangle.class, MixIn.class); // and other set up, if any } } Test Class:
import java.io.IOException; import org.codehaus.jackson.map.ObjectMapper; import org.junit.Test; public class DeserializationTest { @Test public void test() throws IOException { ObjectMapper objectMapper = new ObjectMapper(); // objectMapper.getSerializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); // objectMapper.getDeserializationConfig().addMixInAnnotations(Rectangle.class, MixIn.class); String str = objectMapper.writeValueAsString(new Rectangle(5, 10)); System.out.println(str); Rectangle r = objectMapper.readValue(str, Rectangle.class); } }