2014-10-07 10 views
6

उदाहरण:मैं स्प्रिंग एमवीसी में RequestParam के साथ मान्य पैरामीटर का उपयोग क्यों नहीं कर सकता?

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

मैं कैसे Regno पैरामीटर यहाँ @valid उपयोग कर सकते हैं?

+0

नहीं, तुम नहीं कर सकते हैं बाहर की जाँच कर सकते हैं। '@ वैध 'केवल ऑब्जेक्ट्स के लिए काम करता है, उदाहरण के लिए' स्ट्रिंग 'या' इंटीजर 'जैसी आदिम संरचनाएं नहीं। अगर आप मान्य करना चाहते हैं तो आपको इसे स्वयं करना होगा। –

+0

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

उत्तर

3

@ वैलिड बीन्स को मान्य करने के लिए उपयोग किया जा सकता है। मैंने इसे एकल स्ट्रिंग पैरामीटर पर नहीं देखा है। इसके अलावा इसे कॉन्फ़िगर करने के लिए एक सत्यापनकर्ता की आवश्यकता होती है।

@Valid एनोटेशन मानक जेएसआर -303 बीन सत्यापन एपीआई का हिस्सा है, और यह स्प्रिंग-विशिष्ट निर्माण नहीं है। वसंत एमवीसी एक वैध वैलिडेटर को कॉन्फ़िगर किया गया है, इसलिए लंबे समय तक बाध्यकारी के बाद @Valid ऑब्जेक्ट को मान्य करेगा।

संदर्भ: यह करने के लिए http://docs.spring.io/spring/docs/current/spring-framework-reference/html/validation.html

+0

उत्तर देने के लिए धन्यवाद। क्या मुझे पता है कि मैं अपने स्प्रिंग एमवीसी प्रोजेक्ट के लिए सेवर साइड में मान्य करने के लिए एक स्ट्रिंग पैरामीटर को कैसे मान्य कर सकता हूं। – user3705478

+0

2) मेरा दूसरा सवाल यह है कि, क्या मैं @ModelAttribute और @RequestParam (value = "regNo", आवश्यक = सत्य दोनों का उपयोग कर सकता हूं? – user3705478

1

एक ही रास्ता है की तरह एक आवरण बीन लिखना है निम्नलिखित:

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) { 
    } 

और कृपया इन उत्तरों को here और here देखें।

आशा है कि मदद करता है।

5

देर उत्तर। मुझे हाल ही में इस समस्या का सामना करना पड़ता है और समाधान मिल जाता है। इस प्रकार आप यह कर सकते, सबसे पहले MethodValidationPostProcessor की एक सेम रजिस्टर:

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

और फिर अपने नियंत्रक के प्रकार के स्तर तक @Validated जोड़ें:

@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 बीन मेरे लिए पहेली का गुम टुकड़ा था। धन्यवाद। –

संबंधित मुद्दे

 संबंधित मुद्दे