Browse Source

Raise MethodArgumentNotValidException consistently

Closes gh-30100
pull/30123/head
rstoyanchev 2 years ago
parent
commit
d18bcb3f3d
  1. 2
      spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java
  2. 22
      spring-web/src/test/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessorTests.java

2
spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java

@ -174,7 +174,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol @@ -174,7 +174,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol
}
validateIfApplicable(binder, parameter);
if (binder.getBindingResult().hasErrors() && isBindExceptionRequired(binder, parameter)) {
throw new BindException(binder.getBindingResult());
throw new MethodArgumentNotValidException(parameter, binder.getBindingResult());
}
}
// Value type adaptation, also covering java.util.Optional

22
spring-web/src/test/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessorTests.java

@ -28,9 +28,9 @@ import org.springframework.beans.testfixture.beans.TestBean; @@ -28,9 +28,9 @@ import org.springframework.beans.testfixture.beans.TestBean;
import org.springframework.core.MethodParameter;
import org.springframework.core.annotation.SynthesizingMethodParameter;
import org.springframework.format.support.DefaultFormattingConversionService;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
@ -109,7 +109,7 @@ public class ModelAttributeMethodProcessorTests { @@ -109,7 +109,7 @@ public class ModelAttributeMethodProcessorTests {
@Test
public void supportedParameters() throws Exception {
public void supportedParameters() {
assertThat(this.processor.supportsParameter(this.paramNamedValidModelAttr)).isTrue();
assertThat(this.processor.supportsParameter(this.paramModelAttr)).isTrue();
@ -119,8 +119,8 @@ public class ModelAttributeMethodProcessorTests { @@ -119,8 +119,8 @@ public class ModelAttributeMethodProcessorTests {
}
@Test
public void supportedParametersInDefaultResolutionMode() throws Exception {
processor = new ModelAttributeMethodProcessor(true);
public void supportedParametersInDefaultResolutionMode() {
this.processor = new ModelAttributeMethodProcessor(true);
// Only non-simple types, even if not annotated
assertThat(this.processor.supportsParameter(this.paramNamedValidModelAttr)).isTrue();
@ -132,21 +132,21 @@ public class ModelAttributeMethodProcessorTests { @@ -132,21 +132,21 @@ public class ModelAttributeMethodProcessorTests {
}
@Test
public void supportedReturnTypes() throws Exception {
processor = new ModelAttributeMethodProcessor(false);
public void supportedReturnTypes() {
this.processor = new ModelAttributeMethodProcessor(false);
assertThat(this.processor.supportsReturnType(returnParamNamedModelAttr)).isTrue();
assertThat(this.processor.supportsReturnType(returnParamNonSimpleType)).isFalse();
}
@Test
public void supportedReturnTypesInDefaultResolutionMode() throws Exception {
processor = new ModelAttributeMethodProcessor(true);
public void supportedReturnTypesInDefaultResolutionMode() {
this.processor = new ModelAttributeMethodProcessor(true);
assertThat(this.processor.supportsReturnType(returnParamNamedModelAttr)).isTrue();
assertThat(this.processor.supportsReturnType(returnParamNonSimpleType)).isTrue();
}
@Test
public void bindExceptionRequired() throws Exception {
public void bindExceptionRequired() {
assertThat(this.processor.isBindExceptionRequired(null, this.paramNonSimpleType)).isTrue();
assertThat(this.processor.isBindExceptionRequired(null, this.paramNamedValidModelAttr)).isFalse();
}
@ -227,11 +227,13 @@ public class ModelAttributeMethodProcessorTests { @@ -227,11 +227,13 @@ public class ModelAttributeMethodProcessorTests {
StubRequestDataBinder dataBinder = new StubRequestDataBinder(target, name);
dataBinder.getBindingResult().reject("error");
WebDataBinderFactory binderFactory = mock();
given(binderFactory.createBinder(this.request, target, name)).willReturn(dataBinder);
assertThatExceptionOfType(BindException.class).isThrownBy(() ->
assertThatExceptionOfType(MethodArgumentNotValidException.class).isThrownBy(() ->
this.processor.resolveArgument(this.paramNonSimpleType, this.container, this.request, binderFactory));
verify(binderFactory).createBinder(this.request, target, name);
}

Loading…
Cancel
Save