Browse Source

Use MethodArgumentNotValidException for model attributes

Closes gh-29251
pull/29282/head
rstoyanchev 3 years ago
parent
commit
b08f185a0b
  1. 7
      spring-web/src/main/java/org/springframework/web/method/annotation/ModelAttributeMethodProcessor.java
  2. 3
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java
  3. 3
      spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java

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

@ -50,6 +50,7 @@ import org.springframework.validation.Errors; @@ -50,6 +50,7 @@ import org.springframework.validation.Errors;
import org.springframework.validation.SmartValidator;
import org.springframework.validation.Validator;
import org.springframework.validation.annotation.ValidationAnnotationUtils;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.support.WebDataBinderFactory;
@ -145,7 +146,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol @@ -145,7 +146,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol
try {
attribute = createAttribute(name, parameter, binderFactory, webRequest);
}
catch (BindException ex) {
catch (MethodArgumentNotValidException ex) {
if (isBindExceptionRequired(parameter)) {
// No BindingResult parameter -> fail with BindException
throw ex;
@ -314,7 +315,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol @@ -314,7 +315,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol
if (!parameter.isOptional()) {
try {
Object target = BeanUtils.instantiateClass(ctor, args);
throw new BindException(result) {
throw new MethodArgumentNotValidException(parameter, result) {
@Override
public Object getTarget() {
return target;
@ -325,7 +326,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol @@ -325,7 +326,7 @@ public class ModelAttributeMethodProcessor implements HandlerMethodArgumentResol
// swallow and proceed without target instance
}
}
throw new BindException(result);
throw new MethodArgumentNotValidException(parameter, result);
}
return BeanUtils.instantiateClass(ctor, args);

3
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java

@ -472,8 +472,11 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa @@ -472,8 +472,11 @@ public abstract class ResponseEntityExceptionHandler implements MessageSourceAwa
* @param request the current request
* @return a {@code ResponseEntity} for the response to use, possibly
* {@code null} when the response is already committed
* @deprecated as of 6.0 since {@link org.springframework.web.method.annotation.ModelAttributeMethodProcessor}
* now raises the {@link MethodArgumentNotValidException} subclass instead.
*/
@Nullable
@Deprecated(since = "6.0", forRemoval = true)
protected ResponseEntity<Object> handleBindException(
BindException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) {

3
spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java

@ -574,7 +574,10 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes @@ -574,7 +574,10 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes
* @param handler the executed handler
* @return an empty {@code ModelAndView} indicating the exception was handled
* @throws IOException potentially thrown from {@link HttpServletResponse#sendError}
* @deprecated as of 6.0 since {@link org.springframework.web.method.annotation.ModelAttributeMethodProcessor}
* now raises the {@link MethodArgumentNotValidException} subclass instead.
*/
@Deprecated(since = "6.0", forRemoval = true)
protected ModelAndView handleBindException(BindException ex, HttpServletRequest request,
HttpServletResponse response, @Nullable Object handler) throws IOException {

Loading…
Cancel
Save