2

私のアプリケーションには、このオブジェクトの JSON を取得するエンドポイントがあります。次に、このオブジェクトを呼び出しcalculateSomething()て、数値を http 応答として返します。これらの値を で検証していますjavax.validation。クラスのオブジェクトがどのようExampleに検証されているか、またはこのオブジェクトのどの値がこの特定のエンドポイントで検証されるかを指定する方法はありますか (複数のエンドポイントがあります)。たとえば、この場合、このエンドポイントが呼び出された場合、 のみoneが検証さtwoれます。threeこれらは に必要な唯一の値であるためですcalculateSomething()

クラス:

@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());
    }
4

1 に答える 1

2

グループ名として示すことができるインターフェイスを宣言できます。次に、検証制約を定義しながら、それを特定のグループに適用します。特定の検証グループを使用してのみ検証するには、関連するコントローラー メソッドに適用するだけです

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;

....
于 2020-08-07T15:36:06.193 に答える