如何验证 Json Body
{
"name": "good student",
"marks": {
"math": "122",
"english": "12"
}
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,它接受 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;
}
}
Run Code Online (Sandbox Code Playgroud)
使用 @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;
}
}
Run Code Online (Sandbox Code Playgroud)
字段marks应注释为:
@NotNull- 告诉验证者它必须存在@Valid- 告诉验证器它必须验证嵌套字段示例控制器如下所示:
@Validated
@Controller("/students")
public class StudentController {
@Post
public void create(@Valid @Body Student student) {
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
通过卷曲测试:
curl -v -X POST http://localhost:8080/students -H 'Content-Type: application/json' -d '{"name":"John"}' | jq
Run Code Online (Sandbox Code Playgroud)
有了这个回应:
{
"message": "student.marks: must not be null",
"_links": {
"self": {
"href": "/students",
"templated": false
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |