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;
}
}