gpt4 book ai didi

spring - 从 Spring MVC Controller 调用存储库的问题

转载 作者:行者123 更新时间:2023-12-01 01:05:56 26 4
gpt4 key购买 nike

我有一个 Spring MVC 应用程序 将存储库 ( @Repository ) 直接注入(inject)某些 Controller ( @Controller ) 因此有时会绕过服务层。

例如:我有几个 findByXXX我的存储库中的方法,并且我没有找到一种方法来使用 Spring Roo 围绕我的服务中的自定义方法自动生成包装器方法。

因此,我进退两难:绕过服务层(坏)或花费大量时间(坏)在服务层中围绕我的自定义存储库方法创建简单的包装器方法。

有没有人解决这个困境?

编辑 1 :这是@Nabil 要求的我的 Controller 之一:

@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));
}
}

最佳答案

解决方案是将您的 整个业务逻辑到服务中 . Controller 的职责应该仅仅是将 HTTP 请求转换为 。单次服务电话然后将结果或异常转换为 HTTP 响应。该服务应调用执行业务操作所需的所有存储库和其他服务。

至于几个findByXXX ,代表团不是坏事。但是我会使用通用的单一方法findAll(Predicate p)在存储库层。 IE。喜欢 Spring Data JPA docs建议,甚至更好地使用 QueryDSL .然后服务层将构造谓词,而不是仅仅委托(delegate)给较低层。

关于spring - 从 Spring MVC Controller 调用存储库的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18713080/

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