1 /* 2 * Copyright 2002-2007 the original author or authors. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.springframework.validation; 18 19 /** 20 * A validator for application-specific objects. 21 * 22 * <p>This interface is totally divorced from any infrastructure 23 * or context; that is to say it is not coupled to validating 24 * only objects in the web tier, the data-access tier, or the 25 * whatever-tier. As such it is amenable to being used in any layer 26 * of an application, and supports the encapsulation of validation 27 * logic as first-class citizens in their own right. 28 * 29 * <p>Find below a simple but complete <code>Validator</code> 30 * implementation, which validates that the various {@link String} 31 * properties of a <code>UserLogin</code> instance are not empty 32 * (that is they are not <code>null</code> and do not consist 33 * wholly of whitespace), and that any password that is present is 34 * at least <code>'MINIMUM_PASSWORD_LENGTH'</code> characters in length. 35 * 36 * <pre class="code"> public class UserLoginValidator implements Validator { 37 * 38 * private static final int MINIMUM_PASSWORD_LENGTH = 6; 39 * 40 * public boolean supports(Class clazz) { 41 * return UserLogin.class.isAssignableFrom(clazz); 42 * } 43 * 44 * public void validate(Object target, Errors errors) { 45 * ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required"); 46 * ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required"); 47 * UserLogin login = (UserLogin) target; 48 * if (login.getPassword() != null 49 * && login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) { 50 * errors.rejectValue("password", "field.min.length", 51 * new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)}, 52 * "The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in length."); 53 * } 54 * } 55 * }</pre> 56 * 57 * <p>See also the Spring reference manual for a fuller discussion of 58 * the <code>Validator</code> interface and it's role in a enterprise 59 * application. 60 * 61 * @author Rod Johnson 62 * @see Errors 63 * @see ValidationUtils 64 */ 65 public interface Validator { 66 67 /** 68 * Can this {@link Validator} {@link #validate(Object, Errors) validate} 69 * instances of the supplied <code>clazz</code>? 70 * <p>This method is <i>typically</i> implemented like so: 71 * <pre class="code">return Foo.class.isAssignableFrom(clazz);</pre> 72 * (Where <code>Foo</code> is the class (or superclass) of the actual 73 * object instance that is to be {@link #validate(Object, Errors) validated}.) 74 * @param clazz the {@link Class} that this {@link Validator} is 75 * being asked if it can {@link #validate(Object, Errors) validate} 76 * @return <code>true</code> if this {@link Validator} can indeed 77 * {@link #validate(Object, Errors) validate} instances of the 78 * supplied <code>clazz</code> 79 */ 80 boolean supports(Class clazz); 81 82 /** 83 * Validate the supplied <code>target</code> object, which must be 84 * of a {@link Class} for which the {@link #supports(Class)} method 85 * typically has (or would) return <code>true</code>. 86 * <p>The supplied {@link Errors errors} instance can be used to report 87 * any resulting validation errors. 88 * @param target the object that is to be validated (can be <code>null</code>) 89 * @param errors contextual state about the validation process (never <code>null</code>) 90 * @see ValidationUtils 91 */ 92 void validate(Object target, Errors errors); 93 94 } 95