2014-10-07 6 views
6

Beispiel: hierWarum kann ich Valid-Parameter zusammen mit RequestParam in Spring MVC nicht verwenden?

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

Wie kann ich für den Regno Parameter verwenden @valid?

+0

Nein, Sie können nicht. '@ Valid' funktioniert nur für Objekte, die keine primitiven Strukturen sind wie zB' String' oder 'Integer'. Wenn Sie validieren möchten, müssen Sie es selbst tun. –

+0

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

Antwort

3

@Valid kann verwendet werden, um Bohnen zu validieren. Ich habe es noch nicht bei einzelnen String-Parametern gesehen. Außerdem muss ein Validator konfiguriert sein.

Die @Valid Anmerkung ist Teil des Standard JSR-303 Bean Validation API und ist kein Frühling spezifischen Konstrukt. Spring MVC validiert ein @Valid-Objekt nach der Bindung, solange ein entsprechender Validator konfiguriert wurde.

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

+0

Danke für die Beantwortung. Darf ich wissen, wie ich einen einzelnen String-Parameter für mein Spring MVC-Projekt validieren kann, um auf der Server-Seite zu validieren. – user3705478

+0

2) Meine andere Frage ist, kann ich beide @ModelAttribute und @RequestParam (value = "regNo", erforderlich = wahr) zusammen verwenden? – user3705478

1

einen Weg, es zu tun, ist ein Wrapper Bean wie das schreiben folgende:

public class RegWrapperBean{ 

     @NotNull 
     String regNo ; 

     public String getRegNo(){ 
      return regNo ; 
     } 

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

} 

und Ihre Handler-Methode wie folgt sein:

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

und beziehen Sie sich bitte auf diese Antworten here und here.

Hoffe, dass hilft.

5

Späte Antwort. Ich stoße vor kurzem auf dieses Problem und finde eine Lösung. Sie können es wie folgt, registrieren Zum einen eine Bohne von MethodValidationPostProcessor:

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

und dann die @Validated auf den Typ Ebene Ihrer Controller hinzufügen:

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

Und wenn Benutzer eine ungültige E-Mail angefordert Adresse wird die ConstraintViolationException geworfen werden. Und Sie können es fangen mit:

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

}

Sie können meine Demo-Check-out here

+1

Die MethodValidationPostProcessor Bean war das fehlende Teil des Puzzles für mich. Vielen Dank. –

Verwandte Themen