• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package com.fasterxml.jackson.databind.mixins;
2 
3 import java.util.*;
4 
5 import com.fasterxml.jackson.annotation.*;
6 
7 import com.fasterxml.jackson.databind.*;
8 
9 public class TestMixinSerWithViews
10     extends BaseMapTest
11 {
12     /*
13     /**********************************************************
14     /* Helper bean classes
15     /**********************************************************
16      */
17 
18     static class SimpleTestData
19     {
20         private String name = "shown";
21         private String nameHidden = "hidden";
22 
getName()23         public String getName() { return name; }
getNameHidden( )24         public String getNameHidden( ) { return nameHidden; }
25 
setName( String name )26       public void setName( String name ) {
27         this.name = name;
28       }
29 
setNameHidden( String nameHidden )30       public void setNameHidden( String nameHidden ) {
31         this.nameHidden = nameHidden;
32       }
33     }
34 
35     static class ComplexTestData
36     {
37       String nameNull = null;
38 
39       String nameComplex = "complexValue";
40 
41       String nameComplexHidden = "nameComplexHiddenValue";
42 
43       SimpleTestData testData = new SimpleTestData( );
44 
45       SimpleTestData[] testDataArray = new SimpleTestData[] { new SimpleTestData( ), null };
46 
getNameNull()47       public String getNameNull()
48       {
49         return nameNull;
50       }
51 
setNameNull( String nameNull )52       public void setNameNull( String nameNull )
53       {
54         this.nameNull = nameNull;
55       }
56 
getNameComplex()57       public String getNameComplex()
58       {
59         return nameComplex;
60       }
61 
setNameComplex( String nameComplex )62       public void setNameComplex( String nameComplex )
63       {
64         this.nameComplex = nameComplex;
65       }
66 
getNameComplexHidden()67       public String getNameComplexHidden()
68       {
69         return nameComplexHidden;
70       }
71 
setNameComplexHidden( String nameComplexHidden )72       public void setNameComplexHidden( String nameComplexHidden )
73       {
74         this.nameComplexHidden = nameComplexHidden;
75       }
76 
getTestData()77       public SimpleTestData getTestData()
78       {
79         return testData;
80       }
81 
setTestData( SimpleTestData testData )82       public void setTestData( SimpleTestData testData )
83       {
84         this.testData = testData;
85       }
86 
getTestDataArray()87       public SimpleTestData[] getTestDataArray()
88       {
89         return testDataArray;
90       }
91 
setTestDataArray( SimpleTestData[] testDataArray )92       public void setTestDataArray( SimpleTestData[] testDataArray )
93       {
94         this.testDataArray = testDataArray;
95       }
96     }
97 
98     public interface TestDataJAXBMixin
99     {
100       @JsonView( Views.View.class )
getName( )101       String getName( );
102     }
103 
104     public interface TestComplexDataJAXBMixin
105     {
106       @JsonView( Views.View.class )
getNameNull()107       String getNameNull();
108 
109       @JsonView( Views.View.class )
getNameComplex()110       String getNameComplex();
111 
112       @JsonView( Views.View.class )
getNameComplexHidden()113       String getNameComplexHidden();
114 
115       @JsonView( Views.View.class )
getTestData()116       SimpleTestData getTestData();
117 
118       @JsonView( Views.View.class )
getTestDataArray( )119       SimpleTestData[] getTestDataArray( );
120     }
121 
122     static class Views {
123         static class View { }
124     }
125 
126     public class A {
127         private String name;
128         private int age;
129         private String surname;
130 
A(String name, int age, String surname)131         public A(String name, int age, String surname) { super(); this.name = name; this.age = age; this.surname = surname; }
132 
getName()133         public String getName() { return name; }
134 
setName(String name)135         public void setName(String name) { this.name = name; }
136 
getAge()137         public int getAge() { return age; }
138 
setAge(int age)139         public void setAge(int age) { this.age = age; }
140 
getSurname()141         public String getSurname() { return surname; }
142 
setSurname(String surname)143         public void setSurname(String surname) { this.surname = surname; }
144     }
145 
146     public interface AView { }
147 
148     public abstract class AMixInAnnotation {
149         @JsonProperty("name")
150         @JsonView(AView.class)
getName()151         abstract String getName();
152         @JsonProperty("age") @JsonView(AView.class)
getAge()153         abstract int getAge();
154     }
155 
156     /*
157     /**********************************************************
158     /* Tests
159     /**********************************************************
160      */
161 
testDataBindingUsage( )162     public void testDataBindingUsage( ) throws Exception
163     {
164       ObjectMapper objectMapper = createObjectMapper();
165       ObjectWriter objectWriter = objectMapper.writerWithView(Views.View.class).withDefaultPrettyPrinter();
166       Object object = new ComplexTestData();
167       String json = objectWriter.writeValueAsString(object);
168       assertTrue( json.indexOf( "nameHidden" ) == -1 );
169       assertTrue( json.indexOf( "\"name\" : \"shown\"" ) > 0 );
170     }
171 
testIssue560()172     public void testIssue560() throws Exception
173     {
174         A a = new A("myname", 29, "mysurname");
175 
176         // Property SerializationConfig.SerializationFeature.DEFAULT_VIEW_INCLUSION set to false
177         ObjectMapper mapper = jsonMapperBuilder()
178             .configure(MapperFeature.DEFAULT_VIEW_INCLUSION, Boolean.FALSE)
179             .addMixIn(A.class, AMixInAnnotation.class)
180             .build();
181         String json = mapper.writerWithView(AView.class).writeValueAsString(a);
182 
183         assertTrue(json.indexOf("\"name\"") > 0);
184     }
185 
186     /*
187     /**********************************************************
188     /* Helper methods
189     /**********************************************************
190      */
191 
createObjectMapper()192     private ObjectMapper createObjectMapper()
193     {
194         ObjectMapper objectMapper = jsonMapperBuilder()
195                 .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false )
196                 .serializationInclusion(JsonInclude.Include.NON_NULL )
197                 .configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false )
198                 .build();
199 
200         Map<Class<?>, Class<?>> sourceMixins = new HashMap<Class<?>, Class<?>>( );
201         sourceMixins.put( SimpleTestData.class, TestDataJAXBMixin.class );
202         sourceMixins.put( ComplexTestData.class, TestComplexDataJAXBMixin.class );
203 
204         objectMapper.setMixIns(sourceMixins);
205         return objectMapper;
206     }
207 }
208