我一直在寻找一种方法来以某种方式减少在我的 Spring MVC 控制器中重复出现细微差异的代码量,但是到目前为止搜索 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";
}
此示例包括验证,如果正确则保存,如果事情没有按计划进行,则重定向到错误页面。
如何删除这个重复?