作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在按照我在 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/
我是一名优秀的程序员,十分优秀!