如何验证Json Body
{
"name": "good student",
"marks": {
"math": "122",
"english": "12"
}
}
这不起作用,它接受JSON正文中有或没有标记,即使@NotNull等被添加到Student DTO中的标记
@Introspected
public @Data class Student {
@NotBlank
private String name;
@Valid
@JsonProperty("marks")
private Marks marks;
@Introspected
static @Data class Marks{
@NotBlank
private String math;
@NotBlank
private String english;
}
}
带@Validated注解的控制器用@Valid @Body注释的方法参数
这适用于我在Micronaut版本2.0.3:
@Introspected
public @Data class Student {
@NotBlank
private String name;
@Valid
@NotNull
private Marks marks;
@Introspected
static @Data class Marks{
@NotBlank
private String math;
@NotBlank
private String english;
}
}
字段marks
应注释为:
@NotNull
-告诉验证器它必须存在@Valid
-告诉验证器它必须验证嵌套字段
控制器示例如下:
@Validated
@Controller("/students")
public class StudentController {
@Post
public void create(@Valid @Body Student student) {
// do something
}
}
test by curl:
curl -v -X POST http://localhost:8080/students -H 'Content-Type: application/json' -d '{"name":"John"}' | jq
响应如下:
{
"message": "student.marks: must not be null",
"_links": {
"self": {
"href": "/students",
"templated": false
}
}
}