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

标签 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

    }

原因是,我期望根据类型提交不同类型的数据,并且我想编写一个通用 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/

相关文章:

java - Spring等各种java框架中Annotations有什么用?

java - 如何在netbeans上的spring应用程序中放置css和js?

java - @ModelAttribute 从请求参数填充表单字段而不是支持表单

spring - @Autowired 字段获取 null

java - 在 Servlet 中强制浏览器下载 - Spring

java - 如何映射 ModelAttribute 的属性?

java - ModelAttribute 仅将第一个值添加到列表中

java - 是否可以填充通用列表并从 java 中的方法返回它?

java - OpenGL 纹理中的 LOD 偏差

java - 将字符串拆分为 float 和字符串