spring framework - validation

25
SPRING FRAMEWORK 3.0 Validation, JSR-303 Dmitry Noskov Spring Framework - Validation

Upload: dmitry-noskov

Post on 15-Jan-2015

4.266 views

Category:

Technology


7 download

DESCRIPTION

Validation for Spring based projects with native spring validator and with jsr-303.

TRANSCRIPT

Page 1: Spring Framework - Validation

SPRING FRAMEWORK 3.0

Validation, JSR-303 Dmitry Noskov

Spring Framework - Validation

Page 2: Spring Framework - Validation

Spring Validation

Dmitry Noskov Spring Framework - Validation

Page 3: Spring Framework - Validation

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

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

Auxiliary classes

Dmitry Noskov Spring Framework - Validation

Errors

reject

rejectValue

ValidationUtils

rejectIfEmpty

rejectIfEmptyOrWhitespace

invokeValidator

Page 6: Spring Framework - Validation

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

a specification for Bean Validation

JSR-303

Dmitry Noskov Spring Framework - Validation

Page 8: Spring Framework - Validation

Old validation solution

Dmitry Noskov Spring Framework - Validation

Page 9: Spring Framework - Validation

DDD with JSR-303

Dmitry Noskov Spring Framework - Validation

Page 10: Spring Framework - Validation

Fundamentals

Dmitry Noskov Spring Framework - Validation

Validator

Annotation

Constraint

Validator

Constraint

Violation

Message

Page 11: Spring Framework - Validation

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

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

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

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

ConstraintViolation

Dmitry Noskov Spring Framework - Validation

exposes constraint violation context

core methods

getMessage

getRootBean

getLeafBean

getPropertyPath

getInvalidValue

Page 16: Spring Framework - Validation

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

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

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

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

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

LocalValidatorFactoryBean

Dmitry Noskov Spring Framework - Validation

Spring

Adapter

Spring Validator

JSR-303

Validator

Page 22: Spring Framework - Validation

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

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

Questions

Dmitry Noskov Spring Framework - Validation

Page 25: Spring Framework - Validation

The end

http://www.linkedin.com/in/noskovd

http://www.slideshare.net/analizator/presentations