如何解决Micronaut 嵌套 Json 输入验证
你如何验证 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
}
}
经过 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
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。