在Spring Controller方法中使ModelAttribute可选

时间:2014-12-17 07:00:45

标签: java spring spring-mvc model-view-controller

我有一个控制器方法定义如下 -

@RequestMapping(method = RequestMethod.POST, value="/callMe")
public String myMethod(@ModelAttribute MyClass myObj, Model model) {
    //Do something
}

即使我没有传递ModelAttribute myObj,如何调用上述控制器方法。

我不想在没有它的情况下创建另一个控制器并复制功能。

1 个答案:

答案 0 :(得分:2)

模型属性已经是可选的。即使您没有传递模型属性,也会创建myObj。所以检查

if(myObj == null){
   //Do method1
}else{
  //Do method2
}

无效。

试试这个。在myClass中创建一个像这样的

的布尔值
private Boolean isGotMyObj = false;

在你的jsp中(提交模型属性)添加一个像这样的隐藏输入

<input type="hidden" value="1" name="isGotMyObj" />

然后在控制器中执行此操作

@RequestMapping(method = RequestMethod.POST, value="/callMe")
public String myMethod(@ModelAttribute MyClass myObj, Model model) {
    if (myObj.getIsGotMyObj()){
        //Got model attribute
        //Method 1
    }else{
        //Method 2
    }

    return "callme";
}