Spring MVC-在方法内部使用modelAttribute而不是方法参数作为注释

时间:2019-04-01 20:33:54

标签: java spring-mvc modelattribute

以下是一个代码段,我们可以在方法参数级别使用@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

    }

原因是,我期望基于类型的提交数据类型不同,并且我想编写一个通用控制器,因为唯一的区别是将请求数据转换为特定的Java类。 User和Person类具有很多不同的数据,我认为我不能在这里使用继承/多态来解决用例

1 个答案:

答案 0 :(得分:1)

我不推荐这样的东西。
看这里

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 中,无论如何,它都应该放在其中。