Spring Validation
=================
https://github.com/spring-boot-tutorials/spring-validation
In this article we will configure Spring Validation.
Create Initial Code Base
------------------------
- Go to https://start.spring.io/
- Add the following dependencies:
- spring-boot-starter-validation
- spring-boot-starter-web
- lombok
- Click `Generate`
Dependencies
------------
Dependencies in ``pom.xml``
.. code-block:: xml
org.springframework.boot
spring-boot-starter-validation
org.springframework.boot
spring-boot-starter-web
org.projectlombok
lombok
true
Model
-----
Create new POJO class ``src/main/java/com/example/spring_validation/User.java``:
.. code-block:: java
@Data
@SuperBuilder
@NoArgsConstructor
public class User {
private long id;
@NotBlank(message = "Name is mandatory")
private String name;
@NotBlank(message = "Email is mandatory")
private String email;
}
Service
-------
Create new file ``src/main/java/com/example/spring_validation/UserService.java``:
.. code-block:: java
@Service
@Validated
public class UserService {
public void validateUserViaAnnotation(@Valid User user) {
System.out.println("Bean is valid");
}
@Autowired
Validator validator;
public void validateUserProgrammatically(User user) {
Set> violations = validator.validate(user);
if (!violations.isEmpty()) {
for (ConstraintViolation violation : violations) {
System.out.println("Validation error: " + violation.getMessage());
}
} else {
System.out.println("Bean is valid.");
}
}
}
Controller
----------
Let's create a new file ``src/main/java/com/example/spring_validation/UserController.java``
.. code-block:: java
@RestController
public class UserController {
@PostMapping("/users")
String addUser(@Valid @RequestBody User user) {
return "User is valid";
}
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map handleValidationExceptions(MethodArgumentNotValidException ex) {
Map errors = new HashMap<>();
ex.getBindingResult().getAllErrors().forEach((error) -> {
String fieldName = ((FieldError) error).getField();
String errorMessage = error.getDefaultMessage();
errors.put(fieldName, errorMessage);
});
return errors;
}
}
Main
----
Modify ``MainApplication.java``:
.. code-block:: java
@SpringBootApplication
public class SpringValidationApplication implements CommandLineRunner {
@Autowired
UserService userService;
public static void main(String[] args) {
SpringApplication.run(SpringValidationApplication.class, args);
}
public void run(String... args) throws Exception {
try {
this.userService.validateUserViaAnnotation(User.builder().name("Marcus Chiu").build());
} catch (ConstraintViolationException e) {
Set> violations = e.getConstraintViolations();
if (!violations.isEmpty()) {
for(ConstraintViolation violation : violations) {
System.out.println("Validation error: " + violation.getMessage());
}
} else {
System.out.println("Bean is valid.");
}
}
this.userService.validateUserProgrammatically(User.builder().name("Marcus Chiu").build());
}
}
Run Application
---------------
.. code-block:: sh
mvn spring-boot:run
Verify output console is correct