복붙노트

[SPRING] 스프링 레스트 컨트롤러 : 유효성을 선택적으로 끄는 방법

SPRING

스프링 레스트 컨트롤러 : 유효성을 선택적으로 끄는 방법

내 컨트롤러에는 엔티티를 만드는 방법이 있습니다.

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와 똑같아 보이지만 어노테이션이없는 클래스를 작성해야합니까? 아니면 상속을 통해 어떻게 든 가능합니까?

해결법

  1. ==============================

    1.짧은 대답 : 유효성 검사 그룹 사용 :

    짧은 대답 : 유효성 검사 그룹 사용 :

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

    그리고 메소드 핸들러 매개 변수에서 원하는 그룹을 참조하십시오.

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

    위의 예에서 SomeCriteria 그룹의 유효성이 적용되고 다른 그룹은 무시됩니다. 일반적으로 이러한 유효성 검사 그룹은 빈 인터페이스로 정의됩니다.

    public interface SomeCriteria {}
    

    Hibernate Validator 문서에서이 그룹 제약들에 대한 더 많은 것을 읽을 수있다.

  2. from https://stackoverflow.com/questions/35704351/spring-rest-controller-how-to-selectively-switch-off-validation by cc-by-sa and MIT license