如何按条件验证@RequestMapping 请求?

How to validate @RequestMapping requests by condition?

我正在使用 hibernate validations 验证 spring @RestController 中的传入请求。

问题:我想在多个端点中重复使用同一个 DTO 对象。但仅按条件验证某些字段(例如仅在特定端点上)。

@RestController
public class ProductsServlet {
    @GetMapping("/avail/product")
    public Object avail(@Valid ProductDTO product) {
        //should validate id field only
    }       

    @GetMapping("/sell/product")
    public Object sell(@Valid(with = GroupFuture.class) ProductDTO product) {
        //should validate id + from field
    }       
}

public class ProductDTO {
    @NotNull
    @NotBlank
    private String id;

    @Future(groups = GroupFuture.class)
    private Date from;
}

@Valid(with = GroupFuture.class)当然是无效的。但它显示了我正在努力实现的目标。

这可能吗?

知道了。还必须使用 Default.class 组来验证任何没有组的字段。

@GetMapping("/sell/product")
public Object sell(@Validated({Default.class, GroupFuture.class}) ProductDTO product) {
}