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

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

最新更新