Java SpringMVC-在方法内部使用modelAttribute,而不是方法参数作为注释

Java SpringMVC-在方法内部使用modelAttribute,而不是方法参数作为注释,java,spring-mvc,modelattribute,Java,Spring Mvc,Modelattribute,下面是一段代码片段,我们可以在方法参数级别使用@modeldattribute @ReqestMapping(value = useruri) public void submitInfo(@ModelAttribute User user) { // Business logic } @ReqestMapping(value = personuri) public void submitInfo(@ModelAttribute Perso

下面是一段代码片段,我们可以在方法参数级别使用@modeldattribute

    @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

    }
原因是,我希望根据类型提交不同类型的数据,我想编写一个通用控制器,因为唯一的区别是将请求数据转换为特定的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
放在服务中,这是它应该去的地方。

好的,谢谢。我明白,如果其他方法不好的话。另一个选择是,我可以用类型和相应类的hashmap替换它。但我主要是想看看在方法内部是否有其他可用的注释。但是非常感谢你的建议。我将主要使用上述常用方法。@mihirS使用HashMap方法时,您必须维护硬编码的初始化。我会说,将公共业务逻辑放在服务中,并在控制器中自动连接服务。这是最干净的解决方案(也是我通常自己做的)。