首页 > 解决方案 > 在 Spring 控制器中重用具有不同验证模式的表单数据类

问题描述

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

我有类和控制器:

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 方法使用同一个类的不同模式?

标签: javaspringspring-mvcbean-validationspring-validator

解决方案


我已经知道了。我们需要在验证中使用组并将@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
    }
}

推荐阅读