30.11. Developing REST APIs with Spring Boot: Data Validation with Bean Validation

When developing REST APIs with Spring Boot, one of the crucial steps is to ensure that the data received by your application is correct and valid. This is fundamental to the integrity of the data and the business logic of the application. Spring Boot, together with the Bean Validation specification, provides a robust set of tools for declaratively validating objects. In this section, we will explore how to implement data validation in a REST API with Spring Boot using Bean Validation.

What is Bean Validation?

Bean Validation is a Java specification (JSR 380) that defines a method for validating data in a standardized and framework-independent way. Hibernate Validator is the reference implementation of this specification and is integrated by default in Spring Boot, facilitating the validation of beans (Java objects) through annotations.

Integrating Bean Validation with Spring Boot

To start using Bean Validation with Spring Boot, it is generally not necessary to add any additional dependencies, as Spring Boot Starter already includes Hibernate Validator. However, if you need to add it manually, you can do this in your pom.xml (if using Maven) or build.gradle (if using Gradle) file.

Maven dependency example:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Gradle dependency example:

implementation 'org.springframework.boot:spring-boot-starter-validation'

Validating Objects with Annotations

With Bean Validation, you can use annotations to specify constraints on object fields. These annotations are placed directly on the attributes of the class that represents the object to be validated. Some of the most common annotations include:

  • @NotNull: The field cannot be null.
  • @Min and @Max: Defines the minimum and maximum value for a numeric field.
  • @Size: Specifies the minimum and maximum size for strings or collections.
  • @Email: Validates that the field contains a valid email address.
  • @Pattern: Validates the field with a regular expression.

Example of Class with Validations:

import javax.validation.constraints.*;

public class UsuarioDTO {

    @NotNull(message = "The name cannot be null")
    @Size(min = 3, max = 50, message = "The name must be between 3 and 50 characters")
    private String name;

    @Email(message = "Invalid email address")
    private String email;

    // Getters and Setters omitted for brevity
}

Enabling Validation in the Controller

To enable validation in your controller, you must annotate the controller method parameter with @Valid or @Validated. This tells Spring that the object must be validated before being processed by the method.

Controller Method Example:

@RestController
@RequestMapping("/users")
public class UserController {

    @PostMapping
    public ResponseEntity<UsuarioDTO> createUser(@Valid @RequestBody UserDTO userDTO) {
        // Logic to save the user
        return ResponseEntity.status(HttpStatus.CREATED).body(usuarioDTO);
    }
}

Handling Validation Errors

When a validation error occurs, Spring throws a MethodArgumentNotValidException exception. You can handle these errors globally in your application using a @ControllerAdvice and customize the response sent to the client.

Error Handling Class Example:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<List<String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
        List<String> errors = ex.getBindingResult()
            .getFieldErrors()
            .stream()
            .map(error -> error.getDefaultMessage())
            .collect(Collectors.toList());

        return ResponseEntity.badRequest().body(errors);
    }
}

Conclusion

Validating input data is an essential practice for any RESTful API. With Spring Boot and Bean Validation, you can easily add declarative validations to your data transfer objects (DTOs), ensuring that the data you receive is correct before processing it. Additionally, with proper exception handling, you can provide your API clients with useful and informative responses when input data does not meet expectations.expectations.

Implementing validations is just one part of developing REST APIs with Spring Boot, but it's an important part that helps maintain the quality and reliability of your application. By following best practices and using the tools provided by the Spring Framework, you can create robust and efficient APIs.

Now answer the exercise about the content:

Which of the following statements about data validation in REST APIs with Spring Boot is correct?

You are right! Congratulations, now go to the next page

You missed! Try again.

Article image Developing REST APIs with Spring Boot: Handling exceptions and creating custom responses

Next page of the Free Ebook:

137Developing REST APIs with Spring Boot: Handling exceptions and creating custom responses

5 minutes

Obtenez votre certificat pour ce cours gratuitement ! en téléchargeant lapplication Cursa et en lisant lebook qui sy trouve. Disponible sur Google Play ou App Store !

Get it on Google Play Get it on App Store

+ 6.5 million
students

Free and Valid
Certificate with QR Code

48 thousand free
exercises

4.8/5 rating in
app stores

Free courses in
video, audio and text