나는 봄 - 부트 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")
라인에 도달 할 수 있지만, 실제로는 생략합니다.
이 방법은 인수 유효성 검사를 사용하는 경우, 당신은 당신의 컨트롤러에 주석을해야 @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");
}