[SPRING] 스프링 4에서 @PathVariable 검증
SPRING스프링 4에서 @PathVariable 검증
어떻게 봄에 내 경로 변수의 유효성을 검사 할 수 있습니까? 유일한 필드는 Pojo로 이동하고 싶지 않기 때문에 id 필드의 유효성을 검사하고 싶습니다.
@RestController
public class MyController {
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity method_name(@PathVariable String id) {
/// Some code
}
}
경로 변수에 유효성 검사를 추가하는 것을 시도했지만 작동하지 않습니다.
@RestController
@Validated
public class MyController {
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public ResponseEntity method_name(
@Valid
@Nonnull
@Size(max = 2, min = 1, message = "name should have between 1 and 10 characters")
@PathVariable String id) {
/// Some code
}
}
해결법
-
==============================
1.Spring 설정에서 빈을 생성해야한다.
Spring 설정에서 빈을 생성해야한다.
@Bean public MethodValidationPostProcessor methodValidationPostProcessor() { return new MethodValidationPostProcessor(); }
컨트롤러에 @Validated 주석을 남겨 두어야합니다.
ConstraintViolationException을 처리하려면 컨트롤러 클래스에 Exception Handler가 필요합니다.
@ExceptionHandler(value = { ConstraintViolationException.class }) @ResponseStatus(value = HttpStatus.BAD_REQUEST) public String handleResourceNotFoundException(ConstraintViolationException e) { Set<ConstraintViolation<?>> violations = e.getConstraintViolations(); StringBuilder strBuilder = new StringBuilder(); for (ConstraintViolation<?> violation : violations ) { strBuilder.append(violation.getMessage() + "\n"); } return strBuilder.toString(); }
변경이 끝나면 유효성 검사가 실행될 때 메시지가 표시됩니다.
추신 : 저는 방금 여러분의 @Size 검증을 시도했습니다.
-
==============================
2.이 목표를 보관하려면 응답 메시지를 실제 유효성 검사기와 같게하려면이 해결 방법을 적용하십시오.
이 목표를 보관하려면 응답 메시지를 실제 유효성 검사기와 같게하려면이 해결 방법을 적용하십시오.
@GetMapping("/check/email/{email:" + Constants.LOGIN_REGEX + "}") @Timed public ResponseEntity isValidEmail(@Email @PathVariable(value = "email") String email) { return userService.getUserByEmail(email).map(user -> { Problem problem = Problem.builder() .withType(ErrorConstants.CONSTRAINT_VIOLATION_TYPE) .withTitle("Method argument not valid") .withStatus(Status.BAD_REQUEST) .with("message", ErrorConstants.ERR_VALIDATION) .with("fieldErrors", Arrays.asList(new FieldErrorVM("", "isValidEmail.email", "not unique"))) .build(); return new ResponseEntity(problem, HttpStatus.BAD_REQUEST); }).orElse( new ResponseEntity(new UtilsValidatorResponse(EMAIL_VALIDA), HttpStatus.OK) ); }
-
==============================
3.나는 @RequestMapping ( "/")의 문제라고 생각한다. @requestMapping ( "/")을 클래스에 추가 한 다음 @pathVariable을 사용합니다.
나는 @RequestMapping ( "/")의 문제라고 생각한다. @requestMapping ( "/")을 클래스에 추가 한 다음 @pathVariable을 사용합니다.
@RestController @RequestMapping("/xyz") public class MyController { @RequestMapping(value = "/{id}", method = RequestMethod.PUT) public ResponseEntity method_name(@PathVariable String id) { /// Some code } }
from https://stackoverflow.com/questions/35403744/pathvariable-validation-in-spring-4 by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring welcome-file-list 올바른 매핑 (0) | 2019.01.15 |
---|---|
[SPRING] Spring 3.1 + Hibernate 4.1 JPA, 엔티티 관리자 팩토리가 두 번 등록 됨 (0) | 2019.01.15 |
[SPRING] 여러 개의 @Transactional 데이터 소스를 봄 (0) | 2019.01.15 |
[SPRING] 플라이 웨이 자바 기반 마이그레이션에 스프링 빈이 주입되지 않음 (0) | 2019.01.15 |
[SPRING] Spring + Thymeleaf - 목록의 페이지 매김을 구현하는 방법 (0) | 2019.01.15 |