例如,在此控制器中:
@RequestMapping(value = "/save", method = RequestMethod.POST)
public @ResponseBody String save(
@ModelAttribute("newInstance") MyClass newInstance) { . . . }
是否可以使@ModelAttribute
带注释的参数动态化?我希望能够将它用于多个对象,无论其类型如何。
答案 0 :(得分:3)
您可以通过反射动态实例化模型对象,然后手动触发绑定以获得所需的结果。
@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";
}
答案 1 :(得分:1)
注释是在编译时定义的常量(这就是为什么只有一组有限的类型可用于注释方法/成员)。
这并不意味着它们不能是动态的,你只需要一些狡猾的工作(或另一个图书馆的部分)。
您可以创建一个小脚本语言并将表达式作为参数。这样,String
值可能不是动态的,但您的语言对String
中包含的表达式的作用可能是。
幸运的是,您不必编写自己的小语言,因为Spring已经为您完成了这项工作。 Spring Expression Language (SpEL)。我不确定SpEL是否会在这里帮助你,但值得一看。