@@ -243,8 +243,8 @@ private Object bindMap(
243
243
Constructor <?> constructor = BeanUtils .getResolvableConstructor (targetClass );
244
244
245
245
Object value = (constructor .getParameterCount () > 0 ) ?
246
- bindMapToObjectViaConstructor ( rawMap , constructor , targetType , bindingResult ) :
247
- bindMapToObjectViaSetters ( rawMap , constructor , targetType , bindingResult );
246
+ bindViaConstructorAndSetters ( constructor , rawMap , targetType , bindingResult ) :
247
+ bindViaSetters ( constructor , rawMap , targetType , bindingResult );
248
248
249
249
bindingResult .popNestedPath ();
250
250
@@ -273,9 +273,8 @@ private Map<?, Object> bindMapToMap(
273
273
}
274
274
275
275
@ Nullable
276
- private Object bindMapToObjectViaConstructor (
277
- Map <String , Object > rawMap , Constructor <?> constructor , ResolvableType ownerType ,
278
- ArgumentsBindingResult bindingResult ) {
276
+ private Object bindViaConstructorAndSetters (Constructor <?> constructor ,
277
+ Map <String , Object > rawMap , ResolvableType ownerType , ArgumentsBindingResult bindingResult ) {
279
278
280
279
String [] paramNames = BeanUtils .getParameterNames (constructor );
281
280
Class <?>[] paramTypes = constructor .getParameterTypes ();
@@ -291,13 +290,9 @@ private Object bindMapToObjectViaConstructor(
291
290
name , rawMap .get (name ), !rawMap .containsKey (name ), targetType , paramTypes [i ], bindingResult );
292
291
}
293
292
293
+ Object target ;
294
294
try {
295
- Object target = BeanUtils .instantiateClass (constructor , constructorArguments );
296
- // only attempt further properties binding if there were no errors
297
- if (!bindingResult .hasErrors ()) {
298
- bindProperties (rawMap , ownerType , bindingResult , target );
299
- }
300
- return target ;
295
+ target = BeanUtils .instantiateClass (constructor , constructorArguments );
301
296
}
302
297
catch (BeanInstantiationException ex ) {
303
298
// Ignore, if we had binding errors to begin with
@@ -306,18 +301,26 @@ private Object bindMapToObjectViaConstructor(
306
301
}
307
302
throw ex ;
308
303
}
304
+
305
+ // If no errors, apply setters too
306
+ if (!bindingResult .hasErrors ()) {
307
+ bindViaSetters (target , rawMap , ownerType , bindingResult );
308
+ }
309
+
310
+ return target ;
309
311
}
310
312
311
- private Object bindMapToObjectViaSetters (
312
- Map <String , Object > rawMap , Constructor <?> constructor , ResolvableType ownerType ,
313
- ArgumentsBindingResult bindingResult ) {
313
+ private Object bindViaSetters (Constructor <?> constructor ,
314
+ Map <String , Object > rawMap , ResolvableType ownerType , ArgumentsBindingResult bindingResult ) {
314
315
315
316
Object target = BeanUtils .instantiateClass (constructor );
316
- bindProperties ( rawMap , ownerType , bindingResult , target );
317
+ bindViaSetters ( target , rawMap , ownerType , bindingResult );
317
318
return target ;
318
319
}
319
320
320
- private void bindProperties (Map <String , Object > rawMap , ResolvableType ownerType , ArgumentsBindingResult bindingResult , Object target ) {
321
+ private void bindViaSetters (Object target ,
322
+ Map <String , Object > rawMap , ResolvableType ownerType , ArgumentsBindingResult bindingResult ) {
323
+
321
324
BeanWrapper beanWrapper = (this .fallBackOnDirectFieldAccess ?
322
325
new DirectFieldAccessFallbackBeanWrapper (target ) : PropertyAccessorFactory .forBeanPropertyAccess (target ));
323
326
@@ -355,7 +358,6 @@ private void bindProperties(Map<String, Object> rawMap, ResolvableType ownerType
355
358
}
356
359
}
357
360
358
-
359
361
@ SuppressWarnings ("unchecked" )
360
362
@ Nullable
361
363
private <T > T convertValue (
0 commit comments