From 9f211de113a9462ede4e8eef543f35be7730d427 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 28 Jul 2020 11:08:04 +0200 Subject: [PATCH] Turn MethodArgumentNotValidException into subclass of BindException Closes gh-23107 --- .../validation/BindException.java | 4 +-- .../bind/MethodArgumentNotValidException.java | 29 ++++++++----------- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/spring-context/src/main/java/org/springframework/validation/BindException.java b/spring-context/src/main/java/org/springframework/validation/BindException.java index 736b17aac63..fa11f14529d 100644 --- a/spring-context/src/main/java/org/springframework/validation/BindException.java +++ b/spring-context/src/main/java/org/springframework/validation/BindException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -70,8 +70,6 @@ public class BindException extends Exception implements BindingResult { /** * Return the BindingResult that this BindException wraps. - * Will typically be a BeanPropertyBindingResult. - * @see BeanPropertyBindingResult */ public final BindingResult getBindingResult() { return this.bindingResult; diff --git a/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java b/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java index 954bf6d85b8..38dab43cc57 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java +++ b/spring-web/src/main/java/org/springframework/web/bind/MethodArgumentNotValidException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,22 +17,23 @@ package org.springframework.web.bind; import org.springframework.core.MethodParameter; +import org.springframework.validation.BindException; import org.springframework.validation.BindingResult; import org.springframework.validation.ObjectError; /** * Exception to be thrown when validation on an argument annotated with {@code @Valid} fails. + * Extends {@link BindException} as of 5.3. * * @author Rossen Stoyanchev + * @author Juergen Hoeller * @since 3.1 */ @SuppressWarnings("serial") -public class MethodArgumentNotValidException extends Exception { +public class MethodArgumentNotValidException extends BindException { private final MethodParameter parameter; - private final BindingResult bindingResult; - /** * Constructor for {@link MethodArgumentNotValidException}. @@ -40,35 +41,29 @@ public class MethodArgumentNotValidException extends Exception { * @param bindingResult the results of the validation */ public MethodArgumentNotValidException(MethodParameter parameter, BindingResult bindingResult) { + super(bindingResult); this.parameter = parameter; - this.bindingResult = bindingResult; } + /** * Return the method parameter that failed validation. */ - public MethodParameter getParameter() { + public final MethodParameter getParameter() { return this.parameter; } - /** - * Return the results of the failed validation. - */ - public BindingResult getBindingResult() { - return this.bindingResult; - } - - @Override public String getMessage() { StringBuilder sb = new StringBuilder("Validation failed for argument [") .append(this.parameter.getParameterIndex()).append("] in ") .append(this.parameter.getExecutable().toGenericString()); - if (this.bindingResult.getErrorCount() > 1) { - sb.append(" with ").append(this.bindingResult.getErrorCount()).append(" errors"); + BindingResult bindingResult = getBindingResult(); + if (bindingResult.getErrorCount() > 1) { + sb.append(" with ").append(bindingResult.getErrorCount()).append(" errors"); } sb.append(": "); - for (ObjectError error : this.bindingResult.getAllErrors()) { + for (ObjectError error : bindingResult.getAllErrors()) { sb.append("[").append(error).append("] "); } return sb.toString();