如果字段上的验证失败,则生成json错误消息

时间:2012-06-15 07:29:32

标签: spring-mvc

我有一个表单,我使用ajax调用提交它。我正在使用jsr 303 bean验证来验证表单字段。现在我能够验证字段但是当出现任何验证错误时它应该给出json错误另外一条消息它将生成相应类型的报告。我最大的问题是如果验证失败,如何生成json错误消息。我在控制器类中的代码如下所示。

@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为true,那么我想生成json错误消息。我该怎么办...

2 个答案:

答案 0 :(得分:0)

我从未尝试过使用JSON这样的东西。我不知道那么多。但是您需要在控制器方法中进行一些修改。 像,

将返回类型更改为void而不是ModelAndView。 在方法签名中,再添加一个参数HttpServletResponse response。 然后,您需要使用response.getWriter().write(//something here);编写错误数据。

在ajax响应中,您可以获得从控制器传递的字符串错误消息。

希望这会对你有所帮助。欢呼声。

答案 1 :(得分: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返回类型。

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

祝你好运!