2012-06-15 61 views
0

我有一個表單,我使用ajax調用提交它。我使用jsr 303的bean驗證來驗證表單fields.Now我能夠驗證字段,但當任何驗證錯誤出現時,它應該給予其他明智的json錯誤消息它將生成相應類型的報告。我的大問題是如果驗證失敗,如何生成json錯誤消息。我在控制器類中的代碼如下。生成json錯誤消息,如果驗證失敗的filds

@RequestMapping(value = "pdf", method = { RequestMethod.POST, RequestMethod.GET }) 

    public ModelAndView generatePdfReport(@ModelAttribute("reports") @Valid ReportsCommand model, BindingResult result, ModelAndView modelAndView, 
      HttpServletRequest request, HttpServletResponse response) throws Exception { 


     if (result.hasErrors()) { 
      System.out.println("Error in call type value123"); 

      // return new ModelAndView(new RedirectView("../pages/report/main.jsp?module=report&page=fluctuations")); 
      throw new BindException(result); 
     } 
     else { 
      ..... 
      return modelAndView; 
      } 
      } 

,並在我的模型類以下領域我正在驗證

@Size(min = 2, max = 3, message = "calltype must between 2 to 3 Characters.") 
    private String callType; 

如果result.hasErrors爲真,那麼我想產生的JSON錯誤message.How我能做到這一點...

回答

0

我從來沒有用JSON試過這樣的事情。我不知道那麼多。但是你需要在你的控制器方法中做一些修改。 Like,

將返回類型更改爲void而不是ModelAndView。 在方法簽名中,再添加一個參數HttpServletResponse response。 然後您需要使用response.getWriter().write(//something here);來編寫錯誤數據。

而在ajax響應中,您可以獲得從控制器傳遞的字符串錯誤消息。

希望這可以幫助你。乾杯。

0

你的情況並不簡單。控制器中定義的每個方法只能返回一種類型的視圖。

例如,如果你想返回一個json響應,控制器的方法需要有@ResponseBody註解。

public @ResponseBody Report generatePdfReport(@ModelAttribute("reports") @Valid ReportsCommand model, BindingResult result, ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) throws Exception { 
    return new Report(); 
    } 

如果你想轉寄到驗證結果將顯示視圖的響應,你就會有像你這樣使用一個ModelAndView返回類型。

對於相同的控制器方法,您將無法使用兩種不同的響應類型。我試圖在兩個不同的步驟中分解驗證和報告生成。

祝你好運!