0

我有一个表单,我正在使用 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 为真,那么我想生成 json 错误消息。我该怎么做...

4

2 回答 2

0

我从来没有用 JSON 尝试过这样的事情。我不知道那么多。但是您需要对控制器方法进行一些修改。喜欢,

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

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

希望这对您有所帮助。干杯。

于 2012-06-15T13:32:06.640 回答
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 返回类型。

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

祝你好运 !

于 2012-06-15T13:37:27.450 回答