反序列化抽象类Spring mvc

时间:2014-10-15 07:54:03

标签: java spring spring-mvc

假设我有一个抽象类A,该类在我的MainClass中,然后我有这个类B和C的实现。使用ModelAndAttribute我在某些场景中渲染MainClass与B和其他MainClass与C实现。两者在控制器中都有相同的提交方法,所以当我在表单中请求这个ModelAndAttribute时,我正在等待MainClass与之前呈现的B或C实现,但是Spring是它一直认为是A“NullValueInNestedPathException,Invalid property,嵌套属性的值为null“。

知道Spring是否有机制来确定接收哪个实现类?

我已经阅读了这篇http://www.cowtowncoder.com/blog/archives/2010/03/entry_372.html并且看起来很有希望,但我无法互动,或者我不想与杰克逊就如何序列化实体进行互动。

问候。

1 个答案:

答案 0 :(得分:1)

Spring不会决定实例化哪个实现。 您将不得不添加一些代码来决定需要启动哪两个类

我们有类似的要求 我们在请求参数

中传递类型ClassB或ClassC

我们有方法

@ModelAttribute (value = "mainClass")
public void populateObjectBasedOnRequestParameter (
            ModelMap modelMap, HttpServletRequest request) 

此方法基本上读取请求参数并使用正确的A类实现实例化mainClass

表格提交

 @RequestMapping (value = "/{workItemId}", method = RequestMethod.POST, params = "save", consumes =   MediaType.ALL_VALUE)
    public String commit(
                @ModelAttribute ("mainClass")MainClass mainClass,
                BindingResult result, Principal principal,
                HttpServletRequest request, final ModelMap model) {

使用请求参数

提交表单时

populateObjectBasedOnRequestParameter()执行此方法,以便在执行commit()方法时,模型映射具有A类的启动实现