SlideShare a Scribd company logo
1 of 25
Download to read offline
Spring Framework - Validation




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




          Spring Framework - Validation   Dmitry Noskov
Spring Validator
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);
}



                           Spring Framework - Validation   Dmitry Noskov
Simple Spring validator
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");
        }
    }
}

                                Spring Framework - Validation   Dmitry Noskov
Auxiliary classes
   Errors
     reject
     rejectValue



   ValidationUtils
     rejectIfEmpty
     rejectIfEmptyOrWhitespace

     invokeValidator



                      Spring Framework - Validation   Dmitry Noskov
Resolving codes
   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



                        Spring Framework - Validation   Dmitry Noskov
JSR-303
a specification for Bean Validation




                Spring Framework - Validation   Dmitry Noskov
Old validation solution




              Spring Framework - Validation   Dmitry Noskov
DDD with JSR-303




           Spring Framework - Validation   Dmitry Noskov
Fundamentals

                        Annotation




                                                 Constraint
       Message        Validator                  Validator




                        Constraint
                        Violation



                 Spring Framework - Validation     Dmitry Noskov
Constraints
   applicable to class, method, field
   custom constraints
   composition
   object graphs
   properties:
     message
     groups

     payload



                       Spring Framework - Validation   Dmitry Noskov
Standard constraints
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

                           Spring Framework - Validation   Dmitry Noskov
Example

public class Make {


    @Size(min = 3, max = 20)
    private String name;


    @Size(max = 200)
    private String description;
}




                           Spring Framework - Validation   Dmitry Noskov
Validator methods

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<?>…)
}

                            Spring Framework - Validation   Dmitry Noskov
ConstraintViolation
   exposes constraint violation context
   core methods
     getMessage
     getRootBean

     getLeafBean

     getPropertyPath

     getInvalidValue




                        Spring Framework - Validation   Dmitry Noskov
Validating groups
   separate validating
   simple interfaces for grouping
   inheritance by standard java inheritance
   composition
   combining by @GroupSequence




                      Spring Framework - Validation   Dmitry Noskov
Grouping(1)
   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;
    }




                               Spring Framework - Validation   Dmitry Noskov
Grouping(2)
   grouping sequence
    @GroupSequence(Default.class, MandatoryFieldCheck.class)
    public interface CarChecks {
    }

   using
    javax.validation.Validator validator;
    validator.validate(make, CarChecks.class);




                          Spring Framework - Validation   Dmitry Noskov
Composition
   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;


                           Spring Framework - Validation   Dmitry Noskov
Custom constraint
   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




                           Spring Framework - Validation   Dmitry Noskov
LocalValidatorFactoryBean


     Spring                               JSR-303
    Validator                             Validator

             Spring
            Adapter
                Spring Framework - Validation   Dmitry Noskov
Configuration
    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;


                               Spring Framework - Validation   Dmitry Noskov
Information
   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

                              Spring Framework - Validation   Dmitry Noskov
Questions




            Spring Framework - Validation   Dmitry Noskov
The end




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

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

More Related Content

What's hot

Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
Richard Paul
 

What's hot (20)

Mocking in Java with Mockito
Mocking in Java with MockitoMocking in Java with Mockito
Mocking in Java with Mockito
 
Spring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutesSpring Data JPA from 0-100 in 60 minutes
Spring Data JPA from 0-100 in 60 minutes
 
JUNit Presentation
JUNit PresentationJUNit Presentation
JUNit Presentation
 
Java database connectivity with MySql
Java database connectivity with MySqlJava database connectivity with MySql
Java database connectivity with MySql
 
Introduction to React JS for beginners
Introduction to React JS for beginners Introduction to React JS for beginners
Introduction to React JS for beginners
 
Junit
JunitJunit
Junit
 
Java 8 Lambda and Streams
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and Streams
 
Collections - Lists, Sets
Collections - Lists, Sets Collections - Lists, Sets
Collections - Lists, Sets
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Jest
JestJest
Jest
 
Keyword-driven Test Automation Framework
Keyword-driven Test Automation FrameworkKeyword-driven Test Automation Framework
Keyword-driven Test Automation Framework
 
Spring annotation
Spring annotationSpring annotation
Spring annotation
 
React render props
React render propsReact render props
React render props
 
JUnit & Mockito, first steps
JUnit & Mockito, first stepsJUnit & Mockito, first steps
JUnit & Mockito, first steps
 
django
djangodjango
django
 
Lombok
LombokLombok
Lombok
 
Spring Boot Tutorial
Spring Boot TutorialSpring Boot Tutorial
Spring Boot Tutorial
 
Spring User Guide
Spring User GuideSpring User Guide
Spring User Guide
 
How to go about testing in React?
How to go about testing in React? How to go about testing in React?
How to go about testing in React?
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 

Viewers also liked

Banco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase LiteBanco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase Lite
Fernando Camargo
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf Conference
 
Spring bean mod02
Spring bean mod02Spring bean mod02
Spring bean mod02
Guo Albert
 

Viewers also liked (20)

Spring Framework - Expression Language
Spring Framework - Expression LanguageSpring Framework - Expression Language
Spring Framework - Expression Language
 
Spring Framework - MVC
Spring Framework - MVCSpring Framework - MVC
Spring Framework - MVC
 
Spring Framework - Data Access
Spring Framework - Data AccessSpring Framework - Data Access
Spring Framework - Data Access
 
Spring Framework - Web Flow
Spring Framework - Web FlowSpring Framework - Web Flow
Spring Framework - Web Flow
 
Spring Framework - Spring Security
Spring Framework - Spring SecuritySpring Framework - Spring Security
Spring Framework - Spring Security
 
Spring Framework - Core
Spring Framework - CoreSpring Framework - Core
Spring Framework - Core
 
Spring Framework - AOP
Spring Framework - AOPSpring Framework - AOP
Spring Framework - AOP
 
Flexible validation with Hibernate Validator 5.x.
Flexible validation with Hibernate Validator 5.x.Flexible validation with Hibernate Validator 5.x.
Flexible validation with Hibernate Validator 5.x.
 
Banco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase LiteBanco de dados no Android com Couchbase Lite
Banco de dados no Android com Couchbase Lite
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Boas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful APIBoas práticas no desenvolvimento de uma RESTful API
Boas práticas no desenvolvimento de uma RESTful API
 
Design de RESTful APIs
Design de RESTful APIsDesign de RESTful APIs
Design de RESTful APIs
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Spring bean mod02
Spring bean mod02Spring bean mod02
Spring bean mod02
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 
Orm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел ВейникOrm на no sql через jpa. Павел Вейник
Orm на no sql через jpa. Павел Вейник
 
JoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered designJoinCommunity 2 - Projetando um novo app usando user centered design
JoinCommunity 2 - Projetando um novo app usando user centered design
 
Hibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic IntroductionHibernate working with criteria- Basic Introduction
Hibernate working with criteria- Basic Introduction
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Spring 3 MVC CodeMash 2009
Spring 3 MVC   CodeMash 2009Spring 3 MVC   CodeMash 2009
Spring 3 MVC CodeMash 2009
 

Similar to Spring Framework - Validation

Spring 3: What's New
Spring 3: What's NewSpring 3: What's New
Spring 3: What's New
Ted Pennings
 
Do it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdf
Do it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdfDo it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdf
Do it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdf
adamsapparelsformen
 
Unit test candidate solutions
Unit test candidate solutionsUnit test candidate solutions
Unit test candidate solutions
benewu
 
Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...
Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...
Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...
Xlator
 
Top Ten Web Defenses - DefCamp 2012
Top Ten Web Defenses  - DefCamp 2012Top Ten Web Defenses  - DefCamp 2012
Top Ten Web Defenses - DefCamp 2012
DefCamp
 

Similar to Spring Framework - Validation (20)

Spring 3: What's New
Spring 3: What's NewSpring 3: What's New
Spring 3: What's New
 
Do it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdf
Do it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdfDo it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdf
Do it in Java Please ExamPrep4_Spring2023 Source Packages lo.pdf
 
Unit test candidate solutions
Unit test candidate solutionsUnit test candidate solutions
Unit test candidate solutions
 
Mastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for JavaMastering Mock Objects - Advanced Unit Testing for Java
Mastering Mock Objects - Advanced Unit Testing for Java
 
What’s New in Spring Data MongoDB
What’s New in Spring Data MongoDBWhat’s New in Spring Data MongoDB
What’s New in Spring Data MongoDB
 
Metaprogramming in JavaScript
Metaprogramming in JavaScriptMetaprogramming in JavaScript
Metaprogramming in JavaScript
 
Using the Tooling API to Generate Apex SOAP Web Service Clients
Using the Tooling API to Generate Apex SOAP Web Service ClientsUsing the Tooling API to Generate Apex SOAP Web Service Clients
Using the Tooling API to Generate Apex SOAP Web Service Clients
 
Automatically Assessing Code Understandability: How Far Are We?
Automatically Assessing Code Understandability: How Far Are We?Automatically Assessing Code Understandability: How Far Are We?
Automatically Assessing Code Understandability: How Far Are We?
 
Validate your entities with symfony validator and entity validation api
Validate your entities with symfony validator and entity validation apiValidate your entities with symfony validator and entity validation api
Validate your entities with symfony validator and entity validation api
 
Kief Morris - Infrastructure is terrible
Kief Morris - Infrastructure is terribleKief Morris - Infrastructure is terrible
Kief Morris - Infrastructure is terrible
 
Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...
Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...
Jim Manico: Developer Top 10 Core Controls, web application security @ OWASP ...
 
TDD With Typescript - Noam Katzir
TDD With Typescript - Noam KatzirTDD With Typescript - Noam Katzir
TDD With Typescript - Noam Katzir
 
Data Types/Structures in DivConq
Data Types/Structures in DivConqData Types/Structures in DivConq
Data Types/Structures in DivConq
 
PhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsPhpUnit - The most unknown Parts
PhpUnit - The most unknown Parts
 
Nestjs MasterClass Slides
Nestjs MasterClass SlidesNestjs MasterClass Slides
Nestjs MasterClass Slides
 
Creating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf USCreating Gradle Plugins - GR8Conf US
Creating Gradle Plugins - GR8Conf US
 
Top Ten Web Defenses - DefCamp 2012
Top Ten Web Defenses  - DefCamp 2012Top Ten Web Defenses  - DefCamp 2012
Top Ten Web Defenses - DefCamp 2012
 
Lecture17
Lecture17Lecture17
Lecture17
 
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
 
Javascript-heavy Salesforce Applications
Javascript-heavy Salesforce ApplicationsJavascript-heavy Salesforce Applications
Javascript-heavy Salesforce Applications
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 

Spring Framework - Validation

  • 1. Spring Framework - Validation SPRING FRAMEWORK 3.0 Dmitry Noskov Validation, JSR-303
  • 2. Spring Validation Spring Framework - Validation Dmitry Noskov
  • 3. Spring Validator 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); } Spring Framework - Validation Dmitry Noskov
  • 4. Simple Spring validator 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"); } } } Spring Framework - Validation Dmitry Noskov
  • 5. Auxiliary classes  Errors  reject  rejectValue  ValidationUtils  rejectIfEmpty  rejectIfEmptyOrWhitespace  invokeValidator Spring Framework - Validation Dmitry Noskov
  • 6. Resolving codes  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 Spring Framework - Validation Dmitry Noskov
  • 7. JSR-303 a specification for Bean Validation Spring Framework - Validation Dmitry Noskov
  • 8. Old validation solution Spring Framework - Validation Dmitry Noskov
  • 9. DDD with JSR-303 Spring Framework - Validation Dmitry Noskov
  • 10. Fundamentals Annotation Constraint Message Validator Validator Constraint Violation Spring Framework - Validation Dmitry Noskov
  • 11. Constraints  applicable to class, method, field  custom constraints  composition  object graphs  properties:  message  groups  payload Spring Framework - Validation Dmitry Noskov
  • 12. Standard constraints 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 Spring Framework - Validation Dmitry Noskov
  • 13. Example public class Make { @Size(min = 3, max = 20) private String name; @Size(max = 200) private String description; } Spring Framework - Validation Dmitry Noskov
  • 14. Validator methods 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<?>…) } Spring Framework - Validation Dmitry Noskov
  • 15. ConstraintViolation  exposes constraint violation context  core methods  getMessage  getRootBean  getLeafBean  getPropertyPath  getInvalidValue Spring Framework - Validation Dmitry Noskov
  • 16. Validating groups  separate validating  simple interfaces for grouping  inheritance by standard java inheritance  composition  combining by @GroupSequence Spring Framework - Validation Dmitry Noskov
  • 17. Grouping(1)  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; } Spring Framework - Validation Dmitry Noskov
  • 18. Grouping(2)  grouping sequence @GroupSequence(Default.class, MandatoryFieldCheck.class) public interface CarChecks { }  using javax.validation.Validator validator; validator.validate(make, CarChecks.class); Spring Framework - Validation Dmitry Noskov
  • 19. Composition  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; Spring Framework - Validation Dmitry Noskov
  • 20. Custom constraint  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 Spring Framework - Validation Dmitry Noskov
  • 21. LocalValidatorFactoryBean Spring JSR-303 Validator Validator Spring Adapter Spring Framework - Validation Dmitry Noskov
  • 22. Configuration  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; Spring Framework - Validation Dmitry Noskov
  • 23. Information  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 Spring Framework - Validation Dmitry Noskov
  • 24. Questions Spring Framework - Validation Dmitry Noskov
  • 25. The end http://www.linkedin.com/in/noskovd http://www.slideshare.net/analizator/presentations