유형 목록의 @RequestParam의 크기를 확인하는 방법

에서 :

나는 봄 - 부트 microservice의 REST API를 것으로 예상 만드는거야 @RequestParam유형을 List<String>. 어떻게하면 목록이 최소 값의 최대 금액을 포함 유효성을 검사 할 수 있습니다?

지금까지 내가 사용하려고했습니다 @Size(min=1, max=2)(물론 지원 컬렉션에 예상되는 javax.validation.constraints.Size).

또한 추가하는 시도 @Valid하고 BindingResult과 함께 매개 변수 @Size성공하지 주석.

내가 사용하는 첫 번째 예제와 유사한 솔루션을 사용하여 선호하는 것 @Size(min=1, max=2)보다 컴팩트하고 깔끔한 인을. 이 스프링 부팅 2.1.2.RELEASE입니다.

@RestController
public class MyApi {

    @GetMapping(value = "/myApi", produces = { APPLICATION_JSON_VALUE })
    public ResponseEntity<List<MyObject>> getSomething(@Valid @RequestParam(value = "programEndTime", required = false) @Size(min = 1, max = 2) List<String> programEndTime, BindingResult result) {
        if (result.hasErrors()) {
            System.out.println("Error");
        } else {
            System.out.println("OK");
        }
    }
}

나는 기대 System.out.println("Error")라인에 도달 할 수 있지만, 실제로는 생략합니다.

g00glen00b :

이 방법은 인수 유효성 검사를 사용하는 경우, 당신은 당신의 컨트롤러에 주석을해야 @Validated으로 언급 한 바와 같이, 문서 :

스프링 구동 방식의 검증을 받기 위해서는 모든 대상 클래스는 Spring의 주석해야 @Validated주석. (선택적으로, 당신은 또한 사용에 대한 유효성 검사 그룹을 선언 할 수 있습니다.)를 참조 MethodValidationPostProcessor최대 절전 모드 검사기와 콩 검증 1.1 공급자와 설정 자세한 내용은 javadoc는.

즉, 당신은 당신의 코드를합니다 변경해야합니다 :

@Validated // Add this
@RestController
public class MyApi {
    // ...
}

그 후, 그것은 발생합니다 ContraintViolationException유효성 검사가 일치하지 않는 경우.

당신은 단지이 있기 때문에, 인식하지만 수 @Size()당신이 제공하지 않는 경우, 주석 programEndTime, 컬렉션이 될 것입니다 null그것은 유효뿐만 아니라 것입니다. 당신이 원하지 않는 경우, 당신은 추가해야합니다 @NotNull뿐만 아니라 주석을하거나, 제거 required = false에서 값을 @RequestParam.

당신은 사용할 수 없습니다 BindingResult즉 전용 모델의 속성이나 요청 기관에 대한 작동하기 때문에, 오류를 검색 할 생각입니다. 당신이 할 수있는 것은, 대한 예외 핸들러를 정의입니다 ConstraintViolationException:

@ExceptionHandler(ConstraintViolationException.class)
public void handleConstraint(ConstraintViolationException ex) {
    System.out.println("Error");
}

추천

출처http://43.154.161.224:23101/article/api/json?id=186415&siteId=1