7

私のコントローラーには、エンティティを作成するためのメソッドがあります

import javax.validation.Valid;
...
@RestController
public class Controller {

  @RequestMapping(method = RequestMethod.POST)  
  public ResponseEntity<?> create(@Valid @RequestBody RequestDTO requestDTO) {
  ...

import org.hibernate.validator.constraints.NotEmpty;
...
public class RequestDTO
    @NotEmpty // (1)
    private String field1;
    //other fields, getters and setters.

コントローラーメソッドを追加したい

update(@Valid @RequestBody RequestDTO requestDTO)

ただし、このメソッドではfield1、空またはnullにすることが許可されている必要があります。つまり、行

@NotEmpty // (1)

のはRequestDTO無視する必要があります。

これどうやってするの?とまったく同じように見えるRequestDTOが、注釈を持たないクラスを作成する必要がありますか? それとも、継承を介して何とか可能ですか?

4

1 に答える 1

11

簡単な答え:検証グループを使用します:

@NotEmpty(groups = SomeCriteria.class)
private String field1;

そして、メソッド ハンドラー パラメーターで目的のグループを参照します。

public ResponseEntity<?> create(@Validated(SomeCriteria.class) @RequestBody RequestDTO requestDTO)

上記の例では、グループ内の検証SomeCriteriaが適用され、その他は無視されます。通常、これらの検証グループは空のインターフェイスとして定義されます。

public interface SomeCriteria {}

これらのグループ制約の詳細については、Hibernate Validator のドキュメントを参照してください。

于 2016-02-29T16:21:35.093 に答える