Κυριακή 13 Σεπτεμβρίου 2020

Spring - Validate REST layer (Java Bean Validation API 2.0 - JSR-380)






Validate a list of DTOs when reaching our endpoint

















1. Dependencies - pom.xml


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

or

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


(By default, Spring uses hibernate-validator, which implements the JSR-380)


2. Controller class - REST level


// Enables validation in method level @Validated @RestController @RequestMapping("/api/project") public class DayActivityResource { // Our list object cannot be null // List elements are validated each, using @Valid @PostMapping("/day-activities") public ResponseEntity<List<DayActivityDTO>> createDayActivities(@NotNull @RequestBody List<@Valid DayActivityDTO> dayActivityDtos) { // ... } }



3. DTO classes with constraint annotations



import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; import javax.validation.constraints.Size; import javax.validation.constraints.Valid; public class DayActivityDTO implements Serializable { private String id; private String activityId; private String activityTypeId; // We want this String to be numeric @Pattern(message = "amountFactor must be a number", regexp="^[0-9]*$") @Size(min=1, max=7) private String generalFactor; // A log date must always exist @NotNull private LocalDate logDate; // Validate nested object @Valid private DayActivityRecurringInfo recurringInfo; @Email(message = "Please enter a valid email") private String sendUpdateToEmail; } // Nested class public class DayActivityRecurringInfo { @Min(1) private Integer recurEveryDays; @Max(4) private Integer recurForWeeks; }

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

What may be missing, or could get better?