使用Google App Engine进行Spring验证,在重定向导致NotSerializedException后保留错误

时间:2015-05-16 02:37:36

标签: java spring validation google-app-engine

我正在构建一个电子商务服装应用程序。我试图在重定向后保留错误。我应该注意到我使用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,应用程序可以正常运行,当使用调试器运行时,我可以看到所有错误都被找到,只是在它们应该被显示时才会显示。

谢谢

0 个答案:

没有答案