我正在构建一个电子商务服装应用程序。我试图在重定向后保留错误。我应该注意到我使用tomcat作为我的网络服务器,我正在迁移到Google App Engine并且我遇到了序列化问题。
在我的控制器中,我有一个像这样的方法
@Autowired
@Qualifier("productDetailValidator")
private Validator validator;
@InitBinder("productDetail")
private void initBinder(WebDataBinder binder) {
binder.setValidator(validator);
}
@RequestMapping(value="/add-to-cart", method = RequestMethod.POST)
public String submitForm(@RequestParam("id") Integer productId,
@ModelAttribute("productDetail") @Validated ProductDetail productDetail, BindingResult result,
RedirectAttributes redir, Principal auth, Model model) {
String view = null;
User user = null;
Product product = null;
if(result.hasErrors()) {
user = userService.findUser(name);
product = productService.findProduct(productId);
redir.addFlashAttribute("org.springframework.validation.BindingResult.productDetail", result);
redir.addFlashAttribute(...,...); // I add about 5 attributes to the flashmap besides BindingResult
return "redirect:/product";
}
}
除了绑定结果外,我还要保留一些关于页面的详细信息,例如当前正在查看的产品,购物车总数,用户登录等等
这是我验证器中的验证方法
public void validate(Object obj, Errors errors) {
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "quantity", "valid.quantity", "Please enter a quantity");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "size", "valid.size", "Please select a size.");
ProductDetail productDetail = (ProductDetail) obj;
if(productDetail.getColor().equalsIgnoreCase("default")){
errors.rejectValue("color", "valid.color", "Please select a color.");
}
if(productDetail.getQuantity() <= 0){
errors.rejectValue("quantity", "minimum.quantity", "Please select quantity greater than 0.");
}
}
我现在收到此错误
java.io.NotSerializableException:org.springframework.format.support.DefaultFormattingConversionService
我找不到关于这个问题的很多信息 - 它非常简单,DefaultFormattingConversionService类没有实现Serializable,但我没有访问该类作为Spring框架的一部分。
如果我从Flashmap中取出BindingResult,应用程序可以正常运行,当使用调试器运行时,我可以看到所有错误都被找到,只是在它们应该被显示时才会显示。
谢谢