Spring 中 @Validated 嵌套校验问题


共计 758 个字符,预计需要花费 2 分钟才能阅读完成。

当使用 @Validated 进行参数校验时,如果方法参数是一个包含嵌套对象的复杂对象,@Validated 只会对顶层对象进行校验,而不会递归地对嵌套对象进行校验。例如:

public class Parent {
    @NotNull(message ="parent name 不能为空")
    private String name;

    @NotNull
    private Child child;
}

public class Child {
    @NotNull(message ="child name 不能为空")
    private String name;
}

@RestController
public class MyController {

    @PostMapping("/test")
    public void test(@Validated @RequestBody Parent parent) {
        // some logic
    }
}

此时传递如下参数依旧可以通过校验,并不会提示 child name 不能为空

{
    "name": "parent",
    "child": {

    }
}

如果需要嵌套校验,需要在 child 字段上设置 @Valid 注解,即:

public class Parent {
    @NotNull(message ="parent name 不能为空")
    private String name;

    @Valid
    private Child child;
}

public class Child {
    @NotNull(message ="child name 不能为空")
    private String name;
}

@RestController
public class MyController {

    @PostMapping("/test")
    public void test(@Validated @RequestBody Parent parent) {
        // some logic
    }
}

Tips:清朝云网络工作室

阅读剩余
THE END