[SPRING] 스프링 부트 REST @RequestParam의 유효성이 검사되지 않음
SPRING스프링 부트 REST @RequestParam의 유효성이 검사되지 않음
그물에서 많은 예제를 시도했지만 Spring이 쿼리 문자열 매개 변수의 유효성을 검사하도록 할 수 없습니다. REGEX / 실패를 실행하지 않는 것 같습니다.
package my.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.constraints.Pattern;
import static org.springframework.web.bind.annotation.RequestMethod.GET;
@RestController
public class MyController {
private static final String VALIDATION_REGEX = "^[0-9]+(,[0-9]+)*$";
@RequestMapping(value = "/my/{id}", method = GET)
public myResonseObject getMyParams(@PathVariable("id") String id,
@Valid @Pattern(regexp = VALIDATION_REGEX)
@RequestParam(value = "myparam", required = true) String myParam) {
// Do Stuff!
}
}
현재 행동
PASS - /my/1?myparam=1
PASS - /my/1?myparam=1,2,3
PASS - /my/1?myparam=
PASS - /my/1?myparam=1,bob
원하는 행동
PASS - /my/1?myparam=1
PASS - /my/1?myparam=1,2,3
FAIL - /my/1?myparam=
FAIL - /my/1?myparam=1,bob
감사
해결법
-
==============================
1.다음과 같이 @Validated를 클래스에 추가해야합니다.
다음과 같이 @Validated를 클래스에 추가해야합니다.
@RestController @Validated class Controller { // ... }
최신 정보:
올바르게 구성해야합니다.이 Bean을 컨텍스트에 추가하십시오.
@Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); }
예외를 처리하는 예 :
@ControllerAdvice @Component public class GlobalExceptionHandler { @ExceptionHandler @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) public Map handle(MethodArgumentNotValidException exception) { return error(exception.getBindingResult().getFieldErrors() .stream() .map(FieldError::getDefaultMessage) .collect(Collectors.toList())); } @ExceptionHandler @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) public Map handle(ConstraintViolationException exception) { return error(exception.getConstraintViolations() .stream() .map(ConstraintViolation::getMessage) .collect(Collectors.toList())); } private Map error(Object message) { return Collections.singletonMap("error", message); } }
-
==============================
2.당신은 이것을 시도 할 수 있습니다
당신은 이것을 시도 할 수 있습니다
@Pattern(regexp="^[0-9]+(,[0-9]+)*$") private static final String VALIDATION_REGEX;
(최종 수정 자에주의하십시오) 그렇지 않으면
@Pattern() private static final String VALIDATION_REGEX = "^[0-9]+(,[0-9]+)*$";
그런 다음 메소드에서 @Pattern (regex = VALIDATION REGEX)을 제거하고 @Valid 주석 만 유지하십시오.
public myResonseObject getMyParams(@PathVariable("id") String id, @Valid @RequestParam(value = "myparam", required = true) String myParam) {
-
==============================
3.정규식이 잘못되었습니다
정규식이 잘못되었습니다
"^[0-9]+(,[0-9]+)*$"
절대 파싱하지 않습니다
1,bob
아마도 다음이 필요합니다.
"^\w+(,\w+)*$"
빈 줄을 파싱 해야하는 경우 다음을 사용하십시오.
"^(\w+(,\w+)*)?$"
from https://stackoverflow.com/questions/38614903/spring-boot-rest-requestparam-not-being-validated by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring Service에서 AJAX GET을 사용하여 파일 다운로드 (0) | 2019.08.13 |
---|---|
[SPRING] ConfigurableApplicationContext 및 ApplicationContext (0) | 2019.08.13 |
[SPRING] Spring에서 상수 문자열을 사용하여 패키지 (포함 하위 패키지)의 각 Bean ID 앞에 어떻게합니까? (0) | 2019.08.13 |
[SPRING] Spring @Value 주석에서 기본값을 올바르게 지정하는 방법은 무엇입니까? (0) | 2019.08.12 |
[SPRING] JPA + Spring에서 예외 후 트랜잭션 롤백 (0) | 2019.08.09 |