Spring mvc 如果filds上的验证失败,则生成json错误消息

Spring mvc 如果filds上的验证失败,则生成json错误消息,spring-mvc,Spring Mvc,我有一个表单,我正在使用ajax调用提交它。我正在使用jsr 303 bean验证来验证表单字段。现在我能够验证字段,但当出现任何验证错误时,它应该会给出json错误消息,否则它将生成相应类型的报告。我的大问题是如何生成json验证失败时出现错误消息。我在控制器类中的代码如下所示 @RequestMapping(value = "pdf", method = { RequestMethod.POST, RequestMethod.GET }) public ModelAndView g

我有一个表单,我正在使用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错误消息。我该怎么做…

我从未用json尝试过这样的事情。我不知道有多少。但是您需要对控制器方法进行一些修改。 像

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

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


希望这对你有帮助。干杯。

你的案子并不简单。控制器中定义的每个方法只能返回一种类型的视图

例如,如果要返回json响应,控制器的方法需要@ResponseBy注释

  public @ResponseBody Report generatePdfReport(@ModelAttribute("reports") @Valid ReportsCommand model, BindingResult result, ModelAndView modelAndView, HttpServletRequest request, HttpServletResponse response) throws Exception { 
    return new Report();
  }
如果要将响应转发到将显示验证结果的视图,则必须像以前一样使用ModelAndView返回类型

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

祝你好运