你如何验证 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 注释的 Controller 用@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
- 告诉 validator 它必须存在 @Valid
- 告诉 validator 它必须验证嵌套字段 示例 Controller 如下所示:
@Validated
@Controller("/students")
public class StudentController {
@Post
public void create(@Valid @Body Student student) {
// do something
}
}
通过 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
}
}
}
关于java - Micronaut 嵌套 Json 输入验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66433629/