2014-10-07 9 views
6

Przykład:Dlaczego nie mogę użyć parametru Valid wraz z RequestParam w Spring MVC?

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

Jak mogę używać @valid parametru Regno tutaj?

+0

Nie, nie możesz. '@ Valid' działa tylko dla obiektów, które nie są prymitywne, jak np.' String' lub 'Integer'. Jeśli chcesz zatwierdzić, musisz to zrobić samodzielnie. –

+0

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

Odpowiedz

3

@Valid może być użyty do sprawdzania fasoli. Nie widziałem go używanego na parametry jednego ciągu. Również wymaga skonfigurowania weryfikatora.

Adnotacja @Valid jest częścią standardowego API walidacji JSR-303 Bean i nie jest konstrukcją specyficzną dla Spring. Sprężyna MVC sprawdzi poprawność obiektu @Valid po związaniu tak długo, jak został skonfigurowany odpowiedni Validator.

referencyjny: http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

+0

Dzięki za odpowiedź. Czy mogę wiedzieć, w jaki sposób można sprawdzić poprawność pojedynczego parametru String dla mojego projektu Spring MVC do sprawdzenia po stronie Sever. – user3705478

+0

2) Moje kolejne pytanie brzmi: czy mogę jednocześnie używać zarówno @ModelAttribute i @RequestParam (value = "regNo", required = true)? – user3705478

1

jednym ze sposobów, aby to zrobić, to napisać otoki Bean tak:

public class RegWrapperBean{ 

     @NotNull 
     String regNo ; 

     public String getRegNo(){ 
      return regNo ; 
     } 

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

} 

i metoda obsługi będzie jak następuje:

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

i zapoznaj się z tymi odpowiedziami: here i here.

Nadzieję, że pomaga.

5

Późna odpowiedź. Ostatnio napotykam ten problem i znajduję rozwiązanie. Można to zrobić w następujący sposób: pierwsze zarejestrować fasoli MethodValidationPostProcessor:

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

a następnie dodaj @Validated do poziomu typu kontrolera:

@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; 
    } 
} 

A jeśli użytkownik wniosek o Nieprawidłowy e-mail adres, ConstraintViolationException zostanie zgłoszony. I można złapać go z:

@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 "请求参数不合法"; 
} 

}

Można sprawdzić moje demo here

+1

Fasola MethodValidationPostProcessor była dla mnie brakującym elementem układanki. Dzięki. –

Powiązane problemy