2014-10-07 1 views
6

예 :Spring MVC에서 RequestParam과 함께 유효한 매개 변수를 사용할 수없는 이유는 무엇입니까?

public String getStudentResult(@RequestParam(value = "regNo", required = true) String regNo, ModelMap model){ 

어떻게 여기 레뇨 매개 변수에 @valid 사용할 수 있습니까?

+0

아니 당신은 할 수 없습니다를 확인할 수 있습니다. '@ Valid'는 예를 들어'String'이나'Integer'와 같은 원시 구조가 아닌 객체에서만 작동합니다. 유효성을 확인하려면 직접해야합니다. –

+0

https://jira.spring.io/browse/SPR-6380 – Bax

답변

3

콩을 검증하는 데 @Valid를 사용할 수 있습니다. 나는 그것이 단일 문자열 매개 변수에 사용되는 것을 보지 못했습니다. 또한 유효성 검사기를 구성해야합니다.

@Valid 주석은 표준 JSR-303 Bean 유효성 검사 API의 일부이며 Spring 관련 구조가 아닙니다. Spring MVC는 적절한 Validator가 구성되어있는 한 바인딩 후에 @Valid 객체를 확인합니다.

참조 : 그것을 할 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

+0

답변 해 주셔서 감사합니다. Sever 측에서 유효성을 검사 할 Spring MVC 프로젝트 용 단일 String 매개 변수의 유효성을 검사하는 방법을 알고 싶습니다. – user3705478

+0

2) 또 다른 질문은 @ModelAttribute와 @RequestParam (value = "regNo", required = true)을 함께 사용할 수 있습니까? – user3705478

1

한 가지 방법은 같은 래퍼 Bean을 작성하는 것입니다 다음

public class RegWrapperBean{ 

     @NotNull 
     String regNo ; 

     public String getRegNo(){ 
      return regNo ; 
     } 

     public void setRegNo(String str){ 
      this.regNo=str; 
     } 

} 

을하고 핸들러 메소드는 다음과 같이 될 것입니다 :

@RequestMapping(value="/getStudentResult", method=RequestMethod.POST) 
    public String getStudentResult(@Valid @ModelAttribute RegWrapperBean bean, 
      BindingResult validationResult, Model model) { 
    } 

herehere을 참조하십시오.

희망이 도움이됩니다.

5

답 답. 최근에이 문제가 발생하여 해결책을 찾았습니다. 컨트롤러의 유형 수준으로 @Validated를 추가 한 후

@Bean 
public MethodValidationPostProcessor methodValidationPostProcessor() { 
    return new MethodValidationPostProcessor(); 
} 

과 : 다음과 같이 첫째 MethodValidationPostProcessor의 빈을 등록, 그것을 할 수

@RestController 
@Validated 
public class FooController { 
    @RequestMapping("/email") 
    public Map<String, Object> validate(@Email(message="请输入合法的email地址") @RequestParam String email){ 
    Map<String, Object> result = new HashMap<String, Object>(); 
    result.put("email", email); 
    return result; 
    } 
} 

그리고 사용자가 잘못된 이메일로 요청하는 경우 주소 인 경우 ConstraintViolationException이 발생합니다. 그리고 당신은 그것을 잡을 수 :

@ControllerAdvice 
public class AmazonExceptionHandler { 

@ExceptionHandler(ConstraintViolationException.class) 
@ResponseBody 
@ResponseStatus(HttpStatus.BAD_REQUEST) 
public String handleValidationException(ConstraintViolationException e){ 
    for(ConstraintViolation<?> s:e.getConstraintViolations()){ 
     return s.getInvalidValue()+": "+s.getMessage(); 
    } 
    return "请求参数不合法"; 
} 

}

당신은 내 데모 here

+1

MethodValidationPostProcessor 빈은 나를 위해 빠진 퍼즐 조각이었습니다. 감사. –