Bean Validation
Describe a sample based on REST communication using Spring Framework.
Check the value of RequestBody sent from the client. There are several types of check contents.
etc...
A sample that just performs validation on the controller.
SampleContorller.java
@RestController
@RequestMapping("validation")
public class SampleController {
  //Just validate
  @PostMapping
  public SampleResource validation(
        @RequestBody @Validated SampleResource resource) {
    return resource;
  }
}
@Getter
@Setter
public class SampleResource {
  @NotNull
  @Size(min = 5, max = 30)
  @Pattern(regexp = "[a-zA-Z0-9]*")
  private String message;
}
| Annotation | Description | 
|---|---|
| @NotNull | Prohibit Null | 
| @Size | {min}that's all{max}Make sure that | 
| @Pattern | Confirm that it is the specified pattern | 
Specify @Valid in the field.
SampleContorller.java
Above sample controller together
@Getter
@Setter
public class SampleResource {
  @Valid
  @NotNull
  private SampleNestResource nestResource;
}
You are validating a nested class with @Valid. If nestResource is not sent, Null will be bound to the field and the validation specified in SampleNestResource will not be executed, so it is required by @NotNull.
@Getter
@Setter
public class SampleNestResource {
  @NotNull
  @Size(min = 5, max = 30)
  @Pattern(regexp = "[a-zA-Z0-9]*")
  private String message;
}
When Collection such as List is specified in the field, the validation specification of the class without Collection and the validation specification for the field are different.
SampleContorller.java
Above sample controller together
@Getter
@Setter
public class SampleResource {
  
  @Size(min = 2)
  private List<@NotNull String> strList;
}
Check if the List element of the field is 2 or more with @Size
Make sure String in List is not Null with @NotNull
If no handling is performed, MethodArgumentNotValidException will occur.
In RestController, no error is entered in BindingResult, so get the error contents with Errors.
SampleContorller.java
@RestController
@RequestMapping("validation")
public class SampleController {
  //Just validate
  @PostMapping
  public SampleResource validation(
        @RequestBody @Validated SampleResource resource,
        Errors errors) {
    if (errors.hasErrors()){
      throw new RuntimeException();
    }
    return resource;
  }
}