Spring Framework - Validation
-
Upload
dmitry-noskov -
Category
Technology
-
view
4.259 -
download
7
description
Transcript of Spring Framework - Validation
![Page 1: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/1.jpg)
SPRING FRAMEWORK 3.0
Validation, JSR-303 Dmitry Noskov
Spring Framework - Validation
![Page 2: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/2.jpg)
Spring Validation
Dmitry Noskov Spring Framework - Validation
![Page 3: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/3.jpg)
Spring Validator
Dmitry Noskov Spring Framework - Validation
public interface Validator {
/** Can this instances of the supplied clazz */
boolean supports(Class<?> clazz);
/**
* Validate the supplied target object, which must be
* @param target the object that is to be validated
* @param errors contextual state about the validation process
*/
void validate(Object target, Errors errors);
}
![Page 4: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/4.jpg)
Simple Spring validator
Dmitry Noskov Spring Framework - Validation
public class MakeValidator implements Validator {
public boolean supports(Class<?> c) {return Make.class.equals(c);}
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "name", "er.required");
Make make = (Make)target;
if (make.getName().length()<3) {
errors.rejectValue("name", "er.minlength");
} else if (make.getName().length()>20) {
errors.rejectValue("name", "er.maxlength");
}
}
}
![Page 5: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/5.jpg)
Auxiliary classes
Dmitry Noskov Spring Framework - Validation
Errors
reject
rejectValue
ValidationUtils
rejectIfEmpty
rejectIfEmptyOrWhitespace
invokeValidator
![Page 6: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/6.jpg)
Resolving codes
Dmitry Noskov Spring Framework - Validation
will create message codes for an object error
code + "." + object name
code
will create message codes for a field
code + "." + object name + "." + field
code + "." + field
code + "." + field type
code
![Page 7: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/7.jpg)
a specification for Bean Validation
JSR-303
Dmitry Noskov Spring Framework - Validation
![Page 8: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/8.jpg)
Old validation solution
Dmitry Noskov Spring Framework - Validation
![Page 9: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/9.jpg)
DDD with JSR-303
Dmitry Noskov Spring Framework - Validation
![Page 10: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/10.jpg)
Fundamentals
Dmitry Noskov Spring Framework - Validation
Validator
Annotation
Constraint
Validator
Constraint
Violation
Message
![Page 11: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/11.jpg)
Constraints
Dmitry Noskov Spring Framework - Validation
applicable to class, method, field
custom constraints
composition
object graphs
properties:
message
groups
payload
![Page 12: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/12.jpg)
Standard constraints
Dmitry Noskov Spring Framework - Validation
Annotation Type Description
@Min(10) Number must be higher or equal
@Max(10) Number must be lower or equal
@AssertTrue Boolean must be true, null is valid
@AssertFalse Boolean must be false, null is valid
@NotNull any must not be null
@NotEmpty String / Collection’s must be not null or empty
@NotBlank String @NotEmpty and whitespaces ignored
@Size(min,max) String / Collection’s must be between boundaries
@Past Date / Calendar must be in the past
@Future Date / Calendar must be in the future
@Pattern String must math the regular expression
![Page 13: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/13.jpg)
Example
Dmitry Noskov Spring Framework - Validation
public class Make {
@Size(min = 3, max = 20)
private String name;
@Size(max = 200)
private String description;
}
![Page 14: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/14.jpg)
Validator methods
Dmitry Noskov Spring Framework - Validation
public interface Validator {
/** Validates all constraints on object. */
validate(T object, Class<?>... groups)
/** Validates all constraints placed on the property of object
*/
validateProperty(T object, String pName, Class<?>... groups)
/** Validates all constraints placed on the property
* of the class beanType would the property value */
validateValue(Class<T> type, String pName, Object val,
Class<?>…)
}
![Page 15: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/15.jpg)
ConstraintViolation
Dmitry Noskov Spring Framework - Validation
exposes constraint violation context
core methods
getMessage
getRootBean
getLeafBean
getPropertyPath
getInvalidValue
![Page 16: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/16.jpg)
Validating groups
Dmitry Noskov Spring Framework - Validation
separate validating
simple interfaces for grouping
inheritance by standard java inheritance
composition
combining by @GroupSequence
![Page 17: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/17.jpg)
Grouping(1)
Dmitry Noskov Spring Framework - Validation
grouping interface public interface MandatoryFieldCheck {
}
using public class Car {
@Size(min = 3, max = 20, groups = MandatoryFieldCheck.class)
private String name;
@Size(max = 20)
private String color;
}
![Page 18: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/18.jpg)
Grouping(2)
Dmitry Noskov Spring Framework - Validation
grouping sequence @GroupSequence(Default.class, MandatoryFieldCheck.class)
public interface CarChecks {
}
using javax.validation.Validator validator;
validator.validate(make, CarChecks.class);
![Page 19: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/19.jpg)
Composition
Dmitry Noskov Spring Framework - Validation
annotation @NotNull
@CapitalLetter
@Size(min = 2, max = 14)
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ METHOD, FIELD, ANNOTATION_TYPE })
public @interface CarNameConstraint {
}
using @CarNameConstraint
private String name;
![Page 20: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/20.jpg)
Custom constraint
Dmitry Noskov Spring Framework - Validation
create annotation @Constraint(validatedBy=CapitalLetterValidator.class)
public @interface CapitalLetter {
String message() default "{carbase.error.capital}";
implement constraint validator public class CapitalLetterValidator implements
ConstraintValidator<CapitalLetter, String> {
define a default error message carbase.error.capital=The name must begin with a capital letter
![Page 21: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/21.jpg)
LocalValidatorFactoryBean
Dmitry Noskov Spring Framework - Validation
Spring
Adapter
Spring Validator
JSR-303
Validator
![Page 22: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/22.jpg)
Configuration
Dmitry Noskov Spring Framework - Validation
define bean <bean id="validator"
class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/>
or
<mvc:annotation-driven/>
injecting @Autowired
private javax.validation.Validator validator;
or
@Autowired
private org.springframework.validation.Validator validator;
![Page 23: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/23.jpg)
Information
Dmitry Noskov Spring Framework - Validation
JSR-303 reference
http://docs.jboss.org/hibernate/validator/4.2/reference/en-US/html/
http://static.springsource.org/spring/docs/3.0.x/spring-framework-
reference/html/validation.html
samples
http://src.springsource.org/svn/spring-samples/mvc-showcase
blog
http://blog.springsource.com/category/web/
forum
http://forum.springsource.org/forumdisplay.php?f=25
![Page 24: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/24.jpg)
Questions
Dmitry Noskov Spring Framework - Validation
![Page 25: Spring Framework - Validation](https://reader033.fdocuments.in/reader033/viewer/2022042513/54b772454a795985568b45f4/html5/thumbnails/25.jpg)
The end
http://www.linkedin.com/in/noskovd
http://www.slideshare.net/analizator/presentations