在 Spring Controller 方法中使 ModelAttribute 可选

Nov*_*ser 6 java model-view-controller spring spring-mvc

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

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

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

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

小智 3

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

if(myObj == null){
   //Do method1
}else{
  //Do method2
}
Run Code Online (Sandbox Code Playgroud)

不管用。

尝试这个。像这样在 myClass 中创建一个布尔值

private Boolean isGotMyObj = false;
Run Code Online (Sandbox Code Playgroud)

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

<input type="hidden" value="1" name="isGotMyObj" />
Run Code Online (Sandbox Code Playgroud)

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

@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";
}
Run Code Online (Sandbox Code Playgroud)