package com.fasterxml.jackson.databind.mixins; import java.io.*; import java.util.*; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; public class TestMixinSerForFields extends BaseMapTest { /* /********************************************************** /* Helper bean classes /********************************************************** */ static class BaseClass { public String a; protected String b; public BaseClass(String a, String b) { this.a = a; this.b = b; } } static class SubClass extends BaseClass { public SubClass(String a, String b) { super(a, b); } } abstract class MixIn { // Let's add 'b' as "banana" @JsonProperty("banana") public String b; } abstract class MixIn2 { // Let's remove 'a' @JsonIgnore public String a; // also: add a dummy field that is NOT to match anything @JsonProperty public String xyz; } /* /********************************************************** /* Unit tests /********************************************************** */ public void testFieldMixInsTopLevel() throws IOException { ObjectMapper mapper = new ObjectMapper(); Map<String,Object> result; BaseClass bean = new BaseClass("1", "2"); // first: with no mix-ins: result = writeAndMap(mapper, bean); assertEquals(1, result.size()); assertEquals("1", result.get("a")); // and then with simple mix-in mapper = new ObjectMapper(); mapper.addMixIn(BaseClass.class, MixIn.class); result = writeAndMap(mapper, bean); assertEquals(2, result.size()); assertEquals("1", result.get("a")); assertEquals("2", result.get("banana")); } public void testMultipleFieldMixIns() throws IOException { ObjectMapper mapper = new ObjectMapper(); // ordering here shouldn't matter really... HashMap<Class<?>,Class<?>> mixins = new HashMap<Class<?>,Class<?>>(); mixins.put(SubClass.class, MixIn.class); mixins.put(BaseClass.class, MixIn2.class); mapper.setMixIns(mixins); Map<String,Object> result; result = writeAndMap(mapper, new SubClass("1", "2")); assertEquals(1, result.size()); // 'a' should be suppressed; 'b' mapped to 'banana' assertEquals("2", result.get("banana")); } }