package com.fasterxml.jackson.databind.deser; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.*; /** * This unit test suite that tests use of {@link JsonIgnore} * annotation with deserialization. */ public class IgnoreWithDeserTest extends BaseMapTest { // Class for testing {@link JsonIgnore} annotations with setters final static class SizeClassIgnore { int _x = 0; int _y = 0; public void setX(int value) { _x = value; } @JsonIgnore public void setY(int value) { _y = value; } /* Just igoring won't help a lot here; let's define a replacement * so that we won't get an exception for "unknown field" */ @JsonProperty("y") void foobar(int value) { ; // nop } } @JsonIgnoreProperties({ "z" }) final static class NoYOrZ { public int x; @JsonIgnore public int y = 1; } /* /********************************************************** /* Test methods /********************************************************** */ private final ObjectMapper MAPPER = objectMapper(); public void testSimpleIgnore() throws Exception { SizeClassIgnore result = MAPPER.readValue("{ \"x\":1, \"y\" : 2 }", SizeClassIgnore.class); // x should be set, y not assertEquals(1, result._x); assertEquals(0, result._y); } public void testFailOnIgnore() throws Exception { ObjectReader r = MAPPER.readerFor(NoYOrZ.class); // First, fine to get "x": NoYOrZ result = r.readValue(aposToQuotes("{'x':3}")); assertEquals(3, result.x); assertEquals(1, result.y); // but not 'y' r = r.with(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES); try { result = r.readValue(aposToQuotes("{'x':3, 'y':4}")); fail("Should fail"); } catch (JsonMappingException e) { verifyException(e, "Ignored field"); } // or 'z' try { result = r.readValue(aposToQuotes("{'z':2 }")); fail("Should fail"); } catch (JsonMappingException e) { verifyException(e, "Ignored field"); } } }