복붙노트

[SPRING] Spring MVC의 @RequestBody 매개 변수로 @Valid를 어떻게 사용합니까?

SPRING

Spring MVC의 @RequestBody 매개 변수로 @Valid를 어떻게 사용합니까?

내 @Controller의 처리기 메서드에 대한 매개 변수에서 @Valid를 사용하는 데 문제가 있습니다. 내 코드는 다음과 같습니다.

@RequestMapping(value=BIBBLE_BOBBLE_URI_PATTERN + "/widgets", method=RequestMethod.POST)
@ResponseBody
@ResponseStatus(HttpStatus.CREATED)
public Widget saveNewWidget(
        @PathVariable final String username,
        @PathVariable final String bibbleBobbleName,
        @Valid @RequestBody final Widget widget,
        final BindingResult results,
        final HttpServletRequest request,
        final HttpServletResponse response)

위젯은 내 도메인 객체 중 하나의 클래스입니다. @RequestBody 주석을 사용하여 요청의 페이로드가 위젯에 매핑되었음을 나타냅니다 (잭슨이 클래스 패스에 있지만 XML을 사용할 수 있기 때문에 요청은 JSON입니다.).

보시다시피 BindingResult 매개 변수는 Widget 매개 변수 바로 뒤에옵니다. 그러나 다음 오류가 발생합니다.

java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!

@Valid 주석을 @RequestBody 매개 변수에 적용한 다음 결과를 얻으려면 어떻게해야합니까?

추신 콘트롤러의 배선 처리, 콘텐트 협상 등을 위해 주석 기반 구동을 사용하고 있습니다.

해결법

  1. ==============================

    1.Spring 3.1을 사용하고 있습니까? 이것은 Spring version 3.1에서 새롭게 추가 된 기능이다. @RequestBody 메서드 인수에 대한 유효성 검사를 참조하십시오.

    Spring 3.1을 사용하고 있습니까? 이것은 Spring version 3.1에서 새롭게 추가 된 기능이다. @RequestBody 메서드 인수에 대한 유효성 검사를 참조하십시오.

  2. ==============================

    2.이것은 봄 3.0의 문제이며 3.1 M2에서 수정되었습니다.

    이것은 봄 3.0의 문제이며 3.1 M2에서 수정되었습니다.

    https://jira.springsource.org/browse/SPR-6709

    Spring 3.0을 사용하고 있다면, 몇 가지 스레드와 방대한 독서를 토대로이 문제에 대한 최선의 접근 방법이 있습니다. 애스펙트 지향 접근 방식으로,이 문제를 해결 한 스프링 버전으로 업그레이드 할 때 문제를 해결할 수 있습니다.

    @RequestMapping 어노테이션을 사용하는 메소드에 대한 호출을 가로 채고 @Valid 어노테이션이있는 각 매개 변수에 대해 aspect에서 해당 발리 데이터를 호출합니다.

  3. from https://stackoverflow.com/questions/6129285/how-do-i-use-valid-with-spring-mvcs-requestbody-parameters by cc-by-sa and MIT license