package com.fasterxml.jackson.databind.deser.builder; import com.fasterxml.jackson.annotation.*; import com.fasterxml.jackson.databind.BaseMapTest; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; public class BuilderWithViewTest extends BaseMapTest { static class ViewX { } static class ViewY { } @JsonDeserialize(builder=SimpleBuilderXY.class) static class ValueClassXY { final int _x, _y; protected ValueClassXY(int x, int y) { _x = x+1; _y = y+1; } } static class SimpleBuilderXY { public int x, y; @JsonView(ViewX.class) public SimpleBuilderXY withX(int x0) { this.x = x0; return this; } @JsonView(ViewY.class) public SimpleBuilderXY withY(int y0) { this.y = y0; return this; } public ValueClassXY build() { return new ValueClassXY(x, y); } } @JsonDeserialize(builder=CreatorBuilderXY.class) static class CreatorValueXY { final int _x, _y; protected CreatorValueXY(int x, int y) { _x = x; _y = y; } } @JsonIgnoreProperties({ "bogus" }) static class CreatorBuilderXY { public int x, y; @JsonCreator public CreatorBuilderXY(@JsonProperty("x") @JsonView(ViewX.class) int x, @JsonProperty("y") @JsonView(ViewY.class) int y) { this.x = x; this.y = y; } public CreatorValueXY build() { return new CreatorValueXY(x, y); } } /* /********************************************************** /* Unit tests /********************************************************** */ private final ObjectMapper MAPPER = new ObjectMapper(); public void testSimpleViews() throws Exception { final String json = aposToQuotes("{'x':5,'y':10}"); ValueClassXY resultX = MAPPER.readerFor(ValueClassXY.class) .withView(ViewX.class) .readValue(json); assertEquals(6, resultX._x); assertEquals(1, resultX._y); ValueClassXY resultY = MAPPER.readerFor(ValueClassXY.class) .withView(ViewY.class) .readValue(json); assertEquals(1, resultY._x); assertEquals(11, resultY._y); } public void testCreatorViews() throws Exception { final String json = aposToQuotes("{'x':5,'y':10,'bogus':false}"); CreatorValueXY resultX = MAPPER.readerFor(CreatorValueXY.class) .withView(ViewX.class) .readValue(json); assertEquals(5, resultX._x); assertEquals(0, resultX._y); CreatorValueXY resultY = MAPPER.readerFor(CreatorValueXY.class) .withView(ViewY.class) .readValue(json); assertEquals(0, resultY._x); assertEquals(10, resultY._y); } }