https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html https://docs.spring.io/spring-framework/reference/core/validation/beanvalidation.html https://docs.spring.io/spring-framework/docs/5.3.x/reference/html/core.html#validation https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-validation Spring Validation https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation-beanvalidation JSR-303/JSR-349 https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation-beanvalidation-overview http://beanvalidation.org/ http://beanvalidation.org/2.0/ spring-boot-starter-validation https://spring.io/guides/gs/validating-form-input/ https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/MessageCodesResolver.html https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/DefaultMessageCodesResolver.html 2022 https://habr.com/ru/company/reksoft/blog/675902/ https://github.com/University-and-Education/Validation 2021 https://blog.tejanshrana.com/server-side-input-validation-in-java https://habr.com/ru/post/536612/ 2020 https://habr.com/ru/post/505628/ 2018 https://reflectoring.io/bean-validation-with-spring-boot/ https://habr.com/ru/post/424819/ Generic Params Validation in REST controllers https://habr.com/post/425001/ https://github.com/Okapist/IntegerValidationExample https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-beans BeanWrapper i-face BeanWrapperImpl setPropertyValue getPropertyValue BeanWrapper company = new BeanWrapperImpl(new Company()); // setting the company name.. company.setPropertyValue("name", "Some Company Inc."); // ... can also be done like this: PropertyValue value = new PropertyValue("name", "Some Company Inc."); company.setPropertyValue(value); // ok, let's create the director and tie it to the company: BeanWrapper jim = new BeanWrapperImpl(new Employee()); jim.setPropertyValue("name", "Jim Stravinsky"); company.setPropertyValue("managingDirector", jim.getWrappedInstance()); // retrieving the salary of the managingDirector through the company Float salary = (Float) company.getPropertyValue("managingDirector.salary"); PropertyEditors (java.beans.PropertyEditor) https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-beans-conversion https://speakerdeck.com/gunnarmorling/keeping-your-data-sane-with-bean-validation-2-dot-3 @NotNull @Size(max=64) @Min(0) Use the LocalValidatorFactoryBean to configure a default Validator as a Spring bean: LocalValidatorFactoryBean implements both javax.validation.ValidatorFactory and javax.validation.Validator, as well as Spring’s org.springframework.validation.Validator import javax.validation.Validator; @Service public class MyService { @Autowired private Validator validator; ... } Custom Constraints https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation-beanvalidation-spring-constraints @Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy=MyConstraintValidator.class) public @interface MyConstraint { } import javax.validation.ConstraintValidator; public class MyConstraintValidator implements ConstraintValidator { @Autowired; private Foo aDependency; ... } Configuring a DataBinder https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#validation-binder Foo target = new Foo(); DataBinder binder = new DataBinder(target); binder.setValidator(new FooValidator()); // bind to the target object binder.bind(propertyValues); // validate the target object binder.validate(); // get BindingResult that includes any validation errors BindingResult results = binder.getBindingResult(); A DataBinder can also be configured with multiple Validator instances via dataBinder.addValidators and dataBinder.replaceValidators https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-config-validation It is possible to configure the SpEL expression parser using a parser configuration object (org.springframework.expression.spel.SpelParserConfiguration) class Demo { public List list; } // Turn on: // - auto null reference initialization // - auto collection growing SpelParserConfiguration config = new SpelParserConfiguration(true,true); ExpressionParser parser = new SpelExpressionParser(config); Expression expression = parser.parseExpression("list[3]"); Demo demo = new Demo(); Object o = expression.getValue(demo); // demo.list will now be a real collection of 4 entries // Each entry is a new empty String SpEL compilation https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-spel-compilation Compiler configuration https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-compiler-configuration Expressions in bean definitions https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-beandef Annotation config https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-beandef-annotation-based The @Value annotation can be placed on fields, methods and method/constructor parameters to specify a default value. Language Reference https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-language-ref