[SPRING] Spring MVC @ Valid Validation with Custom HandlerMethodArgumentResolver
SPRINGSpring MVC @ Valid Validation with Custom HandlerMethodArgumentResolver
다음 @Controller 핸들러 메서드 정의를 처리 할 수있는 사용자 정의 HandlerMethodArgumentResolver를 등록하려고합니다.
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
WebMvcConfigurerAdapter에서 addArgumentResolver ()를 재정 의하여 요청 매개 변수를 통해 Domain 객체를 만드는 리졸버를 등록 할 수 있습니다. Spring이 Domain 매개 변수를 분석하려고 할 때, HandlerMethodArgumentResolver의 목록 (많은 부분이 있음)을 통해 지원하는 첫 번째 항목을 선택합니다 ().
위의 예에서 내 해결자가 호출되고 내 Domain 인수가 초기화되지만 @Valid 주석이 처리되지 않고 BindingResult, ErrorsMethodArgumentResolver에 대한 해결 프로그램이 @ModelAttribute, @RequestBody 또는 @RequestPart 인수에는 핸들러 메서드가 있습니다.
@ModelAttribute를 추가하여 문제를 해결하려고하면
@RequestMapping(method = RequestMethod.POST)
public String createDomain(@Valid @ModelAttribute Domain domain, BindingResult errors, @RequestParam("countryId") Long countryId) {
HandlerMethodArgumentResolver 구현 인 ModelAttributeMethodProcessor는 먼저 supports ()로 검사하고 @modelAttribute 및 @Valid를 사용하여 사용자 정의 해결 프로그램에서 인수를 확인합니다. BindingResult는 실패하지 않지만 Domain 인스턴스에서 사용자 지정 만들기 동작을 수행하지 않습니다.
유효성 검사를위한 코드를 복사하여 ModelAttributeMethodProcessor에있는 모델에 추가 할 수는 있지만 모델에 객체를 추가하지 않고도 매개 변수를 확인하고 유효성 검사를 수행하는 더 쉬운 방법이 있었으면합니다. 그런 방법이 있습니까?
해결법
-
==============================
1.당신이 직면하고있는 문제에 대한 좋은 설명.
당신이 직면하고있는 문제에 대한 좋은 설명.
내가 정의한 코드를 체크하고 같은 결론을 내 렸습니다. 동시에 정의 된 HandlerMethodArgumentResolver와 @Valid 관련 유효성 검사를 동시에 적용 할 수있는 기본 제공 방법이 없습니다. 유일한 선택은 ModelAttributeMethodProcessor가 수행하는 작업은 매개 변수에 @Valid 주석이 있는지 확인하고 유효성 검사 로직 관련 코드를 호출하는 것입니다.
ModelAttributeMethodProcessor에서 HandlerMethodResolverArgumentResolver를 파생시키고 기존 코드가 활용되는 방식으로 super.validateIfApplicable (..)을 호출 할 수 있습니다.
-
==============================
2.너무 늦을 지 모르지만 HandlerMethodArgumentResolver가 마지막 인수로 WebDataBinderFactory 객체를 가져온 다음 유효성 검사를 연결하려면 간단히 이것을 구현 자 구현에 추가하십시오.
너무 늦을 지 모르지만 HandlerMethodArgumentResolver가 마지막 인수로 WebDataBinderFactory 객체를 가져온 다음 유효성 검사를 연결하려면 간단히 이것을 구현 자 구현에 추가하십시오.
Object resolvedObject = // your logic if(parameter.hasParameterAnnotation(Valid.class){ binderFactory.createBinder(webRequest,resolvedObject,"resolvedObjectLogicalName").validate (); }
from https://stackoverflow.com/questions/18091936/spring-mvc-valid-validation-with-custom-handlermethodargumentresolver by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 봄 보안 사용자 정의 로그 아웃 처리기 (0) | 2019.02.04 |
---|---|
[SPRING] 봄 MVC 파일 업로드 도움말 (0) | 2019.02.04 |
[SPRING] 인수로 Maven 봄 부팅 디버그를 실행합니다. (0) | 2019.02.04 |
[SPRING] 싱글 톤 빈과 의존성 주입과 결합 된 스프링 프로토 타입 빈. 구성 만하는 접근 방식이 있습니까? (0) | 2019.02.04 |
[SPRING] 웹 응용 프로그램 []이 [Abandoned connection cleanup thread]라는 스레드를 시작한 것 같습니다. com.mysql.jdbc.AbandonedConnectionCleanupThread (0) | 2019.02.04 |