gpt4 book ai didi

java - 如何在 Spring MVC 中将 validator 与 Controller 解耦

转载 作者:行者123 更新时间:2023-11-28 21:31:23 25 4
gpt4 key购买 nike

我一直在按照我在 Spring Petclinic 示例应用程序中找到的内容为我的 Web 应用程序构建带有 validator 的 Spring MVC (3.2/4.0) Controller 。但是,在示例应用程序中, validator 是使用 new 关键字在相关 Controller 中创建的,从而创建了紧密耦合。现在我正在编写测试来覆盖这段代码,事实证明由于这种耦合很难隔离这些类。

是否有推荐的方法将 validator 与 Controller 分离?这个问题还有其他解决方案吗?

这是紧耦合的 Petclinic 应用程序示例:

@RequestMapping(value = "/owners/{ownerId}/pets/new", method = RequestMethod.POST)
public String processCreationForm(@ModelAttribute("pet") Pet pet, BindingResult result, SessionStatus status) {
new PetValidator().validate(pet, result);
if (result.hasErrors()) {
return "pets/createOrUpdatePetForm";
} else {
this.clinicService.savePet(pet);
status.setComplete();
return "redirect:/owners/{ownerId}";
}
}

最佳答案

在您的应用程序上下文中将 Petvalidator 定义为一个 bean,并对您的 Controller 进行以下更改

@RequestMapping(value = "/owners/{ownerId}/pets/new", method = RequestMethod.POST)
public String processCreationForm(@ModelAttribute("pet") Pet pet, BindingResult result, SessionStatus status) {
PetValidator petValidator; //change this line
petValidator.validate(pet,result); //change this line

if (result.hasErrors()) {
return "pets/createOrUpdatePetForm";
} else {
this.clinicService.savePet(pet);
status.setComplete();
return "redirect:/owners/{ownerId}";
}
}

并且您可以使用属性注入(inject)将适当的 Petvalidator 注入(inject)您的 Controller 。如果您使用组件扫描,请添加以下内容以将已注册的 bean Autowiring 到您的 Controller 中。

@Autowired
PetValidator petValidator;

在你的 Controller 中是 PetValidator petvalidator;

关于java - 如何在 Spring MVC 中将 validator 与 Controller 解耦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20840737/

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