1
1
package org .springframework .mapping .support ;
2
2
3
3
import static org .junit .Assert .assertEquals ;
4
+ import static org .junit .Assert .assertNull ;
4
5
5
6
import java .util .ArrayList ;
6
7
import java .util .HashMap ;
@@ -31,15 +32,14 @@ public void mapAutomatic() {
31
32
32
33
@ Test
33
34
public void mapExplicit () throws MappingException {
34
- mapper .setAutoMappingEnabled (false );
35
- mapper .addMapping ("name" );
36
-
37
35
Map <String , Object > source = new HashMap <String , Object >();
38
36
source .put ("name" , "Keith" );
39
37
source .put ("age" , 31 );
40
38
41
39
Person target = new Person ();
42
40
41
+ mapper .setAutoMappingEnabled (false );
42
+ mapper .addMapping ("name" );
43
43
mapper .map (source , target );
44
44
45
45
assertEquals ("Keith" , target .name );
@@ -48,15 +48,14 @@ public void mapExplicit() throws MappingException {
48
48
49
49
@ Test
50
50
public void mapAutomaticWithExplictOverrides () {
51
- mapper .addMapping ("test" , "age" );
52
-
53
51
Map <String , Object > source = new HashMap <String , Object >();
54
52
source .put ("name" , "Keith" );
55
53
source .put ("test" , "3" );
56
54
source .put ("favoriteSport" , "FOOTBALL" );
57
55
58
56
Person target = new Person ();
59
57
58
+ mapper .addMapping ("test" , "age" );
60
59
mapper .map (source , target );
61
60
62
61
assertEquals ("Keith" , target .name );
@@ -65,15 +64,29 @@ public void mapAutomaticWithExplictOverrides() {
65
64
}
66
65
67
66
@ Test
68
- public void mapSameSourceFieldToMultipleTargets () {
69
- mapper .addMapping ("test" , "name" );
70
- mapper .addMapping ("test" , "favoriteSport" );
67
+ public void mapAutomaticIgnoreUnknownField () {
68
+ Map <String , Object > source = new HashMap <String , Object >();
69
+ source .put ("name" , "Keith" );
70
+ source .put ("age" , 31 );
71
+ source .put ("unknown" , "foo" );
71
72
73
+ Person target = new Person ();
74
+
75
+ mapper .map (source , target );
76
+
77
+ assertEquals ("Keith" , target .name );
78
+ assertEquals (31 , target .age );
79
+ }
80
+
81
+ @ Test
82
+ public void mapSameSourceFieldToMultipleTargets () {
72
83
Map <String , Object > source = new HashMap <String , Object >();
73
84
source .put ("test" , "FOOTBALL" );
74
85
75
86
Person target = new Person ();
76
87
88
+ mapper .addMapping ("test" , "name" );
89
+ mapper .addMapping ("test" , "favoriteSport" );
77
90
mapper .map (source , target );
78
91
79
92
assertEquals ("FOOTBALL" , target .name );
@@ -92,32 +105,53 @@ public void mapBean() {
92
105
93
106
mapper .addMapping ("fullName" , "name" );
94
107
mapper .addMapping ("sport" , "favoriteSport" );
95
-
96
108
mapper .map (source , target );
97
109
98
110
assertEquals ("Keith Donald" , target .name );
99
111
assertEquals (31 , target .age );
100
112
assertEquals (Sport .FOOTBALL , target .favoriteSport );
101
113
}
102
114
115
+ @ Test
116
+ public void mapBeanDeep () {
117
+ PersonDto source = new PersonDto ();
118
+ source .age = "0" ;
119
+ NestedDto nested = new NestedDto ();
120
+ nested .foo = "bar" ;
121
+ source .setNested (nested );
122
+
123
+ Person target = new Person ();
124
+
125
+ mapper .addMapping ("nested.foo" , "nested.foo" );
126
+ mapper .map (source , target );
127
+
128
+ assertEquals ("bar" , target .nested .foo );
129
+ }
130
+
103
131
@ Test
104
132
public void mapBeanNested () {
105
133
PersonDto source = new PersonDto ();
106
134
source .setFullName ("Keith Donald" );
107
135
source .setAge ("31" );
108
136
source .setSport ("FOOTBALL" );
137
+ NestedDto nested = new NestedDto ();
138
+ nested .foo = "bar" ;
139
+ source .setNested (nested );
109
140
110
141
Person target = new Person ();
111
142
112
- mapper .addMapping ("fullName" , "nested.fullName" );
113
- mapper .addMapping ("age" , "nested.age" );
114
- mapper .addMapping ("sport" , "nested.sport" );
115
-
143
+ mapper .addMapping ("fullName" , "name" );
144
+ mapper .addMapping ("sport" , "favoriteSport" );
145
+ mapper .addMapping ("nested" , "nested" ).setConverter (new Converter <NestedDto , Nested >() {
146
+ public Nested convert (NestedDto source ) {
147
+ return (Nested ) new SpelMapper ().map (source , new Nested ());
148
+ }
149
+ });
116
150
mapper .map (source , target );
117
151
118
- assertEquals ("Keith Donald" , target .getNested (). getFullName () );
119
- assertEquals ("31" , target . nested .age );
120
- assertEquals (" FOOTBALL" , target .nested . sport );
152
+ assertEquals ("Keith Donald" , target .name );
153
+ assertEquals (31 , target .age );
154
+ assertEquals (Sport . FOOTBALL , target .favoriteSport );
121
155
}
122
156
123
157
@ Test
@@ -132,13 +166,30 @@ public void mapList() {
132
166
133
167
mapper .setAutoMappingEnabled (false );
134
168
mapper .addMapping ("sports" , "favoriteSports" );
135
-
136
169
mapper .map (source , target );
137
170
138
171
assertEquals (Sport .FOOTBALL , target .favoriteSports .get (0 ));
139
172
assertEquals (Sport .BASKETBALL , target .favoriteSports .get (1 ));
140
173
}
141
174
175
+ @ Test
176
+ public void mapListFlatten () {
177
+ PersonDto source = new PersonDto ();
178
+ List <String > sports = new ArrayList <String >();
179
+ sports .add ("FOOTBALL" );
180
+ sports .add ("BASKETBALL" );
181
+ source .setSports (sports );
182
+
183
+ Person target = new Person ();
184
+
185
+ mapper .setAutoMappingEnabled (false );
186
+ mapper .addMapping ("sports[0]" , "favoriteSport" );
187
+ mapper .map (source , target );
188
+
189
+ assertEquals (Sport .FOOTBALL , target .favoriteSport );
190
+ assertNull (target .favoriteSports );
191
+ }
192
+
142
193
@ Test
143
194
public void mapMap () {
144
195
PersonDto source = new PersonDto ();
@@ -187,7 +238,7 @@ public String convert(String source) {
187
238
public void mapFailure () {
188
239
Map <String , Object > source = new HashMap <String , Object >();
189
240
source .put ("name" , "Keith" );
190
- source .put ("age" , "bogus " );
241
+ source .put ("age" , "invalid " );
191
242
Person target = new Person ();
192
243
try {
193
244
mapper .map (source , target );
@@ -208,7 +259,7 @@ public static class PersonDto {
208
259
209
260
private Map <String , String > friendRankings ;
210
261
211
- private NestedDto nestedDto ;
262
+ private NestedDto nested ;
212
263
213
264
public String getFullName () {
214
265
return fullName ;
@@ -250,12 +301,12 @@ public void setFriendRankings(Map<String, String> friendRankings) {
250
301
this .friendRankings = friendRankings ;
251
302
}
252
303
253
- public NestedDto getNestedDto () {
254
- return nestedDto ;
304
+ public NestedDto getNested () {
305
+ return nested ;
255
306
}
256
307
257
- public void setNestedDto (NestedDto nestedDto ) {
258
- this .nestedDto = nestedDto ;
308
+ public void setNested (NestedDto nested ) {
309
+ this .nested = nested ;
259
310
}
260
311
261
312
}
@@ -277,7 +328,7 @@ public static class Person {
277
328
278
329
private Sport favoriteSport ;
279
330
280
- private PersonDto nested ;
331
+ private Nested nested ;
281
332
282
333
// private Person cyclic;
283
334
@@ -317,11 +368,11 @@ public void setFavoriteSport(Sport favoriteSport) {
317
368
this .favoriteSport = favoriteSport ;
318
369
}
319
370
320
- public PersonDto getNested () {
371
+ public Nested getNested () {
321
372
return nested ;
322
373
}
323
374
324
- public void setNested (PersonDto nested ) {
375
+ public void setNested (Nested nested ) {
325
376
this .nested = nested ;
326
377
}
327
378
@@ -364,6 +415,20 @@ public boolean equals(Object o) {
364
415
}
365
416
}
366
417
418
+ public static class Nested {
419
+
420
+ private String foo ;
421
+
422
+ public String getFoo () {
423
+ return foo ;
424
+ }
425
+
426
+ public void setFoo (String foo ) {
427
+ this .foo = foo ;
428
+ }
429
+
430
+ }
431
+
367
432
public enum Sport {
368
433
FOOTBALL , BASKETBALL
369
434
}
0 commit comments