我有一个表单,我使用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错误消息。我该怎么办...
答案 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返回类型。
对于相同的控制器方法,您将无法使用两种不同的响应类型。我想在两个不同的步骤中分解验证和报告生成。
祝你好运!