gpt4 book ai didi

java - 从 Spring Controller 中删除重复项

转载 作者:行者123 更新时间:2023-11-30 11:26:34 25 4
gpt4 key购买 nike

我一直在寻找一种方法来以某种方式减少在我的 Spring MVC Controller 中重复的代码量,这些代码有细微的差异,但到目前为止搜索 SO 问题只产生了一些问题,没有任何令人满意的答案。

我想删除的一个重复示例是这样的,其中用户创建页面和角色创建页面有相似之处:

  @RequestMapping(value = "user/create", method = RequestMethod.GET)
public String create(@ModelAttribute("user") User user, BindingResult errors) {
LOG.debug("Displaying user creation page.");
return "user/create";
}

@RequestMapping(value = "role/create", method = RequestMethod.GET)
public String create(@ModelAttribute("role") Role role, BindingResult errors) {
LOG.debug("Displaying role creation page.");
return "role/create";
}

我想删除的稍微复杂一点的重复变体是发布创建表单的变体:

  @RequestMapping(value = "user/create", method = RequestMethod.POST)
public String save(@ModelAttribute("user") User user, BindingResult errors) {
LOG.debug("Entering save ({})", user);
validator.validate(user, errors);
validator.validatePassword(user, errors);
validator.validateUsernameAvailable(user, errors);
String encodedPassword = encoder.encode(user.getPassword());
user.setPassword(encodedPassword);
if (errors.hasErrors()) {
return create(user, errors);
} else {
service.save(user);
}
return "redirect:/user/index/1";
}

@RequestMapping(value = "role/create", method = RequestMethod.POST)
public String save(@ModelAttribute("role") Role role, BindingResult errors) {
LOG.debug("Entering save({})", role);
validator.validate(role, errors);
if (errors.hasErrors()) {
return create(role, errors);
} else {
service.save(role);
}
return "redirect:/index";
}

此示例包括验证,如果正确则保存,如果事情没有按计划进行则重定向到错误页面。

如何删除这个重复项?

最佳答案

Spring 使用您的处理程序方法参数类型从请求参数或主体创建类实例。因此,无法创建处理程序 (@RequestMapping) 方法,该方法可以采用 Object 并检查它是否是 Role用户。 (从技术上讲,您可以同时拥有两个参数,然后只检查哪个不是 null,但这是糟糕的设计)。

因此,您需要为每个处理程序方法。这是有道理的,因为即使逻辑相似,它仍然特定于您尝试创建的模型对象的确切类型。您执行不同的验证,调用不同的服务方法,并返回不同的 View 名称。

我说你的代码没问题。

关于java - 从 Spring Controller 中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19771081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com