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