下面是一个代码片段,我们可以在方法参数级别使用@ModelAttribute
@ReqestMapping(value = useruri)
public void submitInfo(@ModelAttribute User user) {
// Business logic
}
@ReqestMapping(value = personuri)
public void submitInfo(@ModelAttribute Person person) {
// Business logic
}
我们可以像下面这样吗?
@RequestMapping(value = genericuri)
public void submitInfo(HttpServletRequest request, @PathVariable String type) {
if (type.equals("user")) {
User user = someSpringMvcMethod(request, User.class)
} else if (type.equals("person")) {
Person person = someSpringMvcMethod(request, Person.class)
}
//Business logic
}
原因是,我期望根据类型提交不同类型的数据,并且我想编写一个通用 Controller ,因为唯一的区别是将请求数据转换为特定的 java 类。 User 和 Person 类有很多不同的数据,我认为我不能使用继承/多态性来解决我的用例
最佳答案
我不推荐这样的事情。
看这里
if (type.equals("user")) {
User user = someSpringMvcMethod(request, User.class)
} else if (type.equals("person")) {
Person person = someSpringMvcMethod(request, Person.class)
}
恕我直言,这已经是错误的了。单一方法管理多个模型。
如果您需要其他型号的类型怎么办?另一个 if
分支。
例如,这样就好多了
@ReqestMapping("base-path/user")
public void submitInfo(@ModelAttribute final User user) {
commonLogic(user.valueOne, user.valueTwo);
}
@ReqestMapping("base-path/person")
public void submitInfo(@ModelAttribute final Person person) {
commonLogic(person.valueOne, person.valueTwo);
}
private void commonLogic(final String one, final String two) {
... // Business logic
}
commonLogic
管理模型类型之间的通用业务逻辑。
它集中了工作。
您甚至可以将 commonLogic
放入 Service 中,无论如何,这都是它应该放置的位置。
关于java - Spring mvc - 在方法内部使用 modelAttribute 而不是方法参数作为注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55463168/