在Spring控制器中重用具有不同验证模式的表单数据类

时间:2018-05-11 16:08:23

标签: java spring spring-mvc bean-validation spring-validator

我想使用具有两个差异控制器但具有不同验证模式的相同表单数据类。

我有班级和控制员:

public class Query {
    @Pattern(regexp = "") //different pattern for askHim and askMe
    private String name;
}

@Controller
public class TestController {

    @PostMapping(value = "/api/askHim.html")
    public void askHim(@Valid @RequestBody Query q) {
        //do something
    }

    @PostMapping(value = "/api/askMe.html")
    public void askMe(@Valid @RequestBody Query q) {
        //do something
    }
}

如何使用相同类的不同模式用于askHim方法和askMe方法?

1 个答案:

答案 0 :(得分:0)

我已经知道了。我们需要在验证中使用组,并将@Valid替换为@Validated。

public interface AskMe { }
public interface AskHim { }

public class Query {
    @Pattern(regexp = "name", groups = { AskMe.class })
    @Pattern(regexp = "age", groups = { AskHim.class })
    private String name;
}

@Controller
public class TestController {

    @PostMapping(value = "/api/askHim.html")
    public void askHim(@Validated({ AskHim.class }) @RequestBody Query q) {
        //do something
    }

    @PostMapping(value = "/api/askMe.html")
    public void askMe(@Validated({ AskMe.class }) @RequestBody Query q) {
        //do something
    }
}