执行特定组的 javax 验证

Executing specific group of javax validations

在我的应用程序中,我有一个端点,它获取此对象的 JSON,然后调用 calculateSomething() 到 return 作为 http 响应的数字。我正在使用 javax.validation 验证这些值。现在有没有一种方法可以指定 class Example 的对象是如何被验证的,或者这个对象的哪些值将在这个特定的端点(我有多个端点)中被验证?例如,在这种情况下,如果调用此端点,则只有 onetwothree 将被验证,因为这些是 calculateSomething() 所需的唯一值。

class:

@Entity
@PrimaryKeyJoinColumn(name = "five")
 public class Example extends Foo {
 
    @ValidOne
    @Column
    private Integer one;

    @ValidTwo
    @Column
    private Integer two;

    @ValidThree
    @Column
    private Integer three;

    @ValidFour
    @Column
    private Integer four;

    @ValidFive
    @Column
    private Integer five;

    @Override
    public Integer calculateSomething() throws IllegalArgumentException{
        (one + two) * three
    } 
}

端点:

@PostMapping ("/calculateSomeNumber")
    public ResponseEntity calculateSomeNumber(@Valid @RequestBody Example example){
        return ResponseEntity.ok(example.calculateSomething());
    }

您可以声明可以表示为组名称的接口。然后在定义验证约束时将其应用于特定组。要仅使用特定的验证组进行验证,只需将其应用于相关的控制器方法

public interface ValidOne {
}

public interface ValidTwo {
}
  
public class SomeController {
    @PostMapping ("/calculateSomeNumber")
    public ResponseEntity calculateSomeNumber(@Validated({ValidOne.class}) @RequestBody Example example){
        return ResponseEntity.ok(example.calculateSomething());
    }
...

@Entity
@PrimaryKeyJoinColumn(name = "five")
 public class Example extends Foo {
 
    @Column
    @NotNull(groups = ValidOne.class)
    private Integer one;

    @Column
    @NotNull(groups = ValidTwo.class)
    private Integer two;

....