Skip to content

Commit 9a7871f

Browse files
committed
Consistent validation logic
Issue: SPR-12655
1 parent 80128f1 commit 9a7871f

File tree

3 files changed

+18
-22
lines changed

3 files changed

+18
-22
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,8 @@ public final Object resolveArgument(MethodParameter parameter, ModelAndViewConta
107107
if (binder.getTarget() != null) {
108108
bindRequestParameters(binder, webRequest);
109109
validateIfApplicable(binder, parameter);
110-
if (binder.getBindingResult().hasErrors()) {
111-
if (isBindExceptionRequired(binder, parameter)) {
112-
throw new BindException(binder.getBindingResult());
113-
}
110+
if (binder.getBindingResult().hasErrors() && isBindExceptionRequired(binder, parameter)) {
111+
throw new BindException(binder.getBindingResult());
114112
}
115113
}
116114

@@ -166,7 +164,7 @@ protected void validateIfApplicable(WebDataBinder binder, MethodParameter method
166164
}
167165

168166
/**
169-
* Whether to raise a {@link BindException} on validation errors.
167+
* Whether to raise a fatal bind exception on validation errors.
170168
* @param binder the data binder used to perform data binding
171169
* @param methodParam the method argument
172170
* @return {@code true} if the next method argument is not of type {@link Errors}

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public RequestPartMethodArgumentResolver(List<HttpMessageConverter<?>> messageCo
7676
super(messageConverters);
7777
}
7878

79+
7980
/**
8081
* Supports the following:
8182
* <ul>
@@ -111,7 +112,7 @@ public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer m
111112
assertIsMultipartRequest(servletRequest);
112113

113114
MultipartHttpServletRequest multipartRequest =
114-
WebUtils.getNativeRequest(servletRequest, MultipartHttpServletRequest.class);
115+
WebUtils.getNativeRequest(servletRequest, MultipartHttpServletRequest.class);
115116

116117
String partName = getPartName(parameter);
117118
Object arg;
@@ -161,8 +162,8 @@ private static void assertIsMultipartRequest(HttpServletRequest request) {
161162
}
162163

163164
private String getPartName(MethodParameter methodParam) {
164-
RequestPart annot = methodParam.getParameterAnnotation(RequestPart.class);
165-
String partName = (annot != null ? annot.value() : "");
165+
RequestPart ann = methodParam.getParameterAnnotation(RequestPart.class);
166+
String partName = (ann != null ? ann.value() : "");
166167
if (partName.length() == 0) {
167168
partName = methodParam.getParameterName();
168169
if (partName == null) {
@@ -202,17 +203,16 @@ private void validate(WebDataBinder binder, MethodParameter methodParam) throws
202203
Object hints = AnnotationUtils.getValue(ann);
203204
binder.validate(hints instanceof Object[] ? (Object[]) hints : new Object[] {hints});
204205
BindingResult bindingResult = binder.getBindingResult();
205-
if (bindingResult.hasErrors()) {
206-
if (isBindExceptionRequired(binder, methodParam)) {
207-
throw new MethodArgumentNotValidException(methodParam, bindingResult);
208-
}
206+
if (bindingResult.hasErrors() && isBindExceptionRequired(binder, methodParam)) {
207+
throw new MethodArgumentNotValidException(methodParam, bindingResult);
209208
}
209+
break;
210210
}
211211
}
212212
}
213213

214214
/**
215-
* Whether to raise a {@link MethodArgumentNotValidException} on validation errors.
215+
* Whether to raise a fatal bind exception on validation errors.
216216
* @param binder the data binder used to perform data binding
217217
* @param methodParam the method argument
218218
* @return {@code true} if the next method argument is not of type {@link Errors}

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,14 +89,14 @@ public boolean supportsReturnType(MethodParameter returnType) {
8989
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
9090
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
9191

92-
Object argument = readWithMessageConverters(webRequest, parameter, parameter.getGenericParameterType());
92+
Object arg = readWithMessageConverters(webRequest, parameter, parameter.getGenericParameterType());
9393
String name = Conventions.getVariableNameForParameter(parameter);
94-
WebDataBinder binder = binderFactory.createBinder(webRequest, argument, name);
95-
if (argument != null) {
94+
WebDataBinder binder = binderFactory.createBinder(webRequest, arg, name);
95+
if (arg != null) {
9696
validate(binder, parameter);
9797
}
9898
mavContainer.addAttribute(BindingResult.MODEL_KEY_PREFIX + name, binder.getBindingResult());
99-
return argument;
99+
return arg;
100100
}
101101

102102
/**
@@ -116,18 +116,16 @@ private void validate(WebDataBinder binder, MethodParameter methodParam) throws
116116
Object hints = AnnotationUtils.getValue(ann);
117117
binder.validate(hints instanceof Object[] ? (Object[]) hints : new Object[] {hints});
118118
BindingResult bindingResult = binder.getBindingResult();
119-
if (bindingResult.hasErrors()) {
120-
if (isBindExceptionRequired(binder, methodParam)) {
121-
throw new MethodArgumentNotValidException(methodParam, bindingResult);
122-
}
119+
if (bindingResult.hasErrors() && isBindExceptionRequired(binder, methodParam)) {
120+
throw new MethodArgumentNotValidException(methodParam, bindingResult);
123121
}
124122
break;
125123
}
126124
}
127125
}
128126

129127
/**
130-
* Whether to raise a {@link MethodArgumentNotValidException} on validation errors.
128+
* Whether to raise a fatal bind exception on validation errors.
131129
* @param binder the data binder used to perform data binding
132130
* @param methodParam the method argument
133131
* @return {@code true} if the next method argument is not of type {@link Errors}

0 commit comments

Comments
 (0)