2012-06-15 62 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返回类型。

对于相同的控制器方法,您将无法使用两种不同的响应类型。我试图在两个不同的步骤中分解验证和报告生成。

祝你好运!