Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法使@modeldattribute成为动态的?_Java_Spring_Spring Mvc - Fatal编程技术网

Java 有没有办法使@modeldattribute成为动态的?

Java 有没有办法使@modeldattribute成为动态的?,java,spring,spring-mvc,Java,Spring,Spring Mvc,例如,在此控制器中: @RequestMapping(value = "/save", method = RequestMethod.POST) public @ResponseBody String save( @ModelAttribute("newInstance") MyClass newInstance) { . . . } 是否可以使带注释的参数动态化?我希望能够将其用于多个对象,而不考虑类型 注释是在编译时定义的常量(这就是为什么只有有限的一组类型

例如,在此控制器中:

@RequestMapping(value = "/save", method = RequestMethod.POST)
    public @ResponseBody String save(
            @ModelAttribute("newInstance") MyClass newInstance) { . . . }

是否可以使带注释的参数动态化?我希望能够将其用于多个对象,而不考虑类型

注释是在编译时定义的常量(这就是为什么只有有限的一组类型可用于注释方法/成员)

但这并不意味着它们不能是动态的,您只需要在您的部分(或其他库的部分)上进行一些巧妙的工作

您可以创建一种小型脚本语言,并使用表达式作为参数。这样,
String
值可能不是动态的,但是您的语言对
String
中包含的表达式所做的操作可能是动态的


幸运的是,您不必编写自己的小型语言,因为Spring已经为您完成了。我不确定SpEL是否会在这里帮助您,但值得一看。

您可以通过反射动态实例化模型对象,然后手动触发绑定以获得所需的结果

@RequestMapping(method=RequestMethod.POST,value="/add/{modelSelect}")
public String saveEntity(@PathVariable String modelSelect, WebRequest request){
    Object domainObject = //create object with your custom strategy using the modelSelect       
    WebRequestDataBinder binder = new WebRequestDataBinder(domainObject);
    binder.bind(request);
    //do something with the domain object
    return "/somePage";
}
这也可能是有用的