【发布时间】:2013-09-10 07:35:11
【问题描述】:
我有一个 Spring MVC 应用程序将存储库 (@Repository) 直接注入一些控制器 (@Controller),因此有时会绕过服务层。
例如:我的存储库中有几个 findByXXX 方法,但我没有找到一种方法可以使用 Spring Roo 自动围绕我的服务中的自定义方法生成包装器方法。
因此,我面临两难境地:要么绕过服务层(不好),要么花费大量时间(不好)在服务层中围绕我的自定义存储库方法创建简单的包装器方法。
有没有人解决这个困境?
编辑 1:这是我应@Nabil 要求的控制器之一:
@Controller
@RequestMapping("/signup")
public class SignupController {
@Autowired
private SignupService signupService;
@Autowired
private SigninService signinService;
@Autowired
private MemberRepository memberRepository;
@Autowired
private PreferenceService preferenceService;
@RequestMapping(method = RequestMethod.GET, produces = "text/html")
public String signupForm(@ModelAttribute SignupInfo signupInfo, Model model) {
populateForm(model, signupInfo);
return "signup";
}
@RequestMapping(method = RequestMethod.POST, produces = "text/html")
public String signup(@ModelAttribute @Validated({ Validation.Signup.class }) SignupInfo signupInfo, BindingResult bindingResult, Model model) {
if (!preferenceService.isEmailAvailable(signupInfo.getMember().getEmail())) {
bindingResult.rejectValue("member.email", "controller.signup.email_already_used");
}
if (bindingResult.hasErrors()) {
populateForm(model, signupInfo);
return "signup";
}
signupService.signupMember(signupInfo.getMember(), signupInfo.getAddressReference());
signinService.signin(memberRepository.findByEmail(signupInfo.getMember().getEmail()));
return "redirect:preference/email";
}
private void populateForm(Model model, SignupInfo signupInfo) {
model.addAttribute("signupInfo", signupInfo);
model.addAttribute("roles", Arrays.asList(Role.ROLE_BASIC_CHILDMINDER, Role.ROLE_BASIC_FAMILY));
}
}
【问题讨论】:
-
你能发一个你的控制器方法的例子吗
标签: spring spring-mvc spring-roo spring-data