Skip to content

Commit 10cb232

Browse files
committed
Introduce Validator.validateObject(Object) with returned Errors
Includes failOnError method on Errors interface for use with validateObject. Declares many Errors methods as default methods for lean SimpleErrors class. Closes gh-19877
1 parent 9571aa1 commit 10cb232

File tree

6 files changed

+585
-305
lines changed

6 files changed

+585
-305
lines changed

spring-context/src/main/java/org/springframework/validation/AbstractErrors.java

Lines changed: 10 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2020 the original author or authors.
2+
* Copyright 2002-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,13 +28,14 @@
2828
import org.springframework.util.StringUtils;
2929

3030
/**
31-
* Abstract implementation of the {@link Errors} interface. Provides common
32-
* access to evaluated errors; however, does not define concrete management
31+
* Abstract implementation of the {@link Errors} interface.
32+
* Provides nested path handling but does not define concrete management
3333
* of {@link ObjectError ObjectErrors} and {@link FieldError FieldErrors}.
3434
*
3535
* @author Juergen Hoeller
3636
* @author Rossen Stoyanchev
3737
* @since 2.5.3
38+
* @see AbstractBindingResult
3839
*/
3940
@SuppressWarnings("serial")
4041
public abstract class AbstractErrors implements Errors, Serializable {
@@ -81,8 +82,8 @@ protected void doSetNestedPath(@Nullable String nestedPath) {
8182
nestedPath = "";
8283
}
8384
nestedPath = canonicalFieldName(nestedPath);
84-
if (nestedPath.length() > 0 && !nestedPath.endsWith(Errors.NESTED_PATH_SEPARATOR)) {
85-
nestedPath += Errors.NESTED_PATH_SEPARATOR;
85+
if (nestedPath.length() > 0 && !nestedPath.endsWith(NESTED_PATH_SEPARATOR)) {
86+
nestedPath += NESTED_PATH_SEPARATOR;
8687
}
8788
this.nestedPath = nestedPath;
8889
}
@@ -97,7 +98,7 @@ protected String fixedField(@Nullable String field) {
9798
}
9899
else {
99100
String path = getNestedPath();
100-
return (path.endsWith(Errors.NESTED_PATH_SEPARATOR) ?
101+
return (path.endsWith(NESTED_PATH_SEPARATOR) ?
101102
path.substring(0, path.length() - NESTED_PATH_SEPARATOR.length()) : path);
102103
}
103104
}
@@ -112,117 +113,19 @@ protected String canonicalFieldName(String field) {
112113
return field;
113114
}
114115

115-
116-
@Override
117-
public void reject(String errorCode) {
118-
reject(errorCode, null, null);
119-
}
120-
121-
@Override
122-
public void reject(String errorCode, String defaultMessage) {
123-
reject(errorCode, null, defaultMessage);
124-
}
125-
126-
@Override
127-
public void rejectValue(@Nullable String field, String errorCode) {
128-
rejectValue(field, errorCode, null, null);
129-
}
130-
131-
@Override
132-
public void rejectValue(@Nullable String field, String errorCode, String defaultMessage) {
133-
rejectValue(field, errorCode, null, defaultMessage);
134-
}
135-
136-
137-
@Override
138-
public boolean hasErrors() {
139-
return !getAllErrors().isEmpty();
140-
}
141-
142-
@Override
143-
public int getErrorCount() {
144-
return getAllErrors().size();
145-
}
146-
147-
@Override
148-
public List<ObjectError> getAllErrors() {
149-
List<ObjectError> result = new ArrayList<>();
150-
result.addAll(getGlobalErrors());
151-
result.addAll(getFieldErrors());
152-
return Collections.unmodifiableList(result);
153-
}
154-
155-
@Override
156-
public boolean hasGlobalErrors() {
157-
return (getGlobalErrorCount() > 0);
158-
}
159-
160-
@Override
161-
public int getGlobalErrorCount() {
162-
return getGlobalErrors().size();
163-
}
164-
165-
@Override
166-
@Nullable
167-
public ObjectError getGlobalError() {
168-
List<ObjectError> globalErrors = getGlobalErrors();
169-
return (!globalErrors.isEmpty() ? globalErrors.get(0) : null);
170-
}
171-
172-
@Override
173-
public boolean hasFieldErrors() {
174-
return (getFieldErrorCount() > 0);
175-
}
176-
177-
@Override
178-
public int getFieldErrorCount() {
179-
return getFieldErrors().size();
180-
}
181-
182-
@Override
183-
@Nullable
184-
public FieldError getFieldError() {
185-
List<FieldError> fieldErrors = getFieldErrors();
186-
return (!fieldErrors.isEmpty() ? fieldErrors.get(0) : null);
187-
}
188-
189-
@Override
190-
public boolean hasFieldErrors(String field) {
191-
return (getFieldErrorCount(field) > 0);
192-
}
193-
194-
@Override
195-
public int getFieldErrorCount(String field) {
196-
return getFieldErrors(field).size();
197-
}
198-
199116
@Override
200117
public List<FieldError> getFieldErrors(String field) {
201118
List<FieldError> fieldErrors = getFieldErrors();
202119
List<FieldError> result = new ArrayList<>();
203120
String fixedField = fixedField(field);
204-
for (FieldError error : fieldErrors) {
205-
if (isMatchingFieldError(fixedField, error)) {
206-
result.add(error);
121+
for (FieldError fieldError : fieldErrors) {
122+
if (isMatchingFieldError(fixedField, fieldError)) {
123+
result.add(fieldError);
207124
}
208125
}
209126
return Collections.unmodifiableList(result);
210127
}
211128

212-
@Override
213-
@Nullable
214-
public FieldError getFieldError(String field) {
215-
List<FieldError> fieldErrors = getFieldErrors(field);
216-
return (!fieldErrors.isEmpty() ? fieldErrors.get(0) : null);
217-
}
218-
219-
@Override
220-
@Nullable
221-
public Class<?> getFieldType(String field) {
222-
Object value = getFieldValue(field);
223-
return (value != null ? value.getClass() : null);
224-
}
225-
226129
/**
227130
* Check whether the given FieldError matches the given field.
228131
* @param field the field that we are looking up FieldErrors for

0 commit comments

Comments
 (0)