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?
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?
@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
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
2) Moje kolejne pytanie brzmi: czy mogę jednocześnie używać zarówno @ModelAttribute i @RequestParam (value = "regNo", required = true)? – user3705478
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.
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
Fasola MethodValidationPostProcessor była dla mnie brakującym elementem układanki. Dzięki. –
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. –
https://jira.spring.io/browse/SPR-6380 – Bax