我目前正在使用Spring Boot应用程序,该应用程序允许用户将类别保存到数据库中。我可以使我的代码“工作”,但是,我认为它限制了我可以进行的测试数量,因此是我的问题。
控制器接收类别列表。控制器遍历这些类别,验证它们,并根据它们是否有效将它们保存到数据库中。控制器最终返回消息列表,以便收件人可以识别已接受或拒绝的类别,等等。
我有一个模型消息列表(List),在每次迭代时,控制器都会实例化一个新的模型消息(new ModelMessage())并最终将其添加到列表中。有没有一种方法可以在每次迭代时注入新的ModelMessage,或者我是否需要使用new关键字?如果我确实使用了new关键字,我会感觉这限制了我的可测试性/将控制器与模型消息紧密耦合。
控制器:
@PostMapping("/category")
public String saveCategoryModelToDatabase(@RequestBody CategoryModelWrapper categoryModelWrapper){
List<CategoryModel> categoryModelList = categoryModelWrapper.getCategoryModelList();
modelMessageList.clear();
for(CategoryModel categoryModel : categoryModelList){
//Resetting model
modelMessage = new ModelMessage(); //This tightly couples my method to the ModelMessage class, which is bad for testing?
//@Autowired modelMessage; <-- something like this? Inject a new ModelMessage with each iteration.
modelMessage.setName(categoryModel.getName());
//Resetting categoryModelErrors
Errors categoryModelErrors = new BeanPropertyBindingResult(categoryModel, "categoryModel");
categoryModelValidator.validate(categoryModel, categoryModelErrors);
if(categoryModelErrors.hasErrors()){
modelMessage.setStatus(ModelMessageStatusEnum.REJECTED);
modelMessage.setReason(MODEL_MESSAGE_0004);
}
if(categoryModelService.save(categoryModel)){
modelMessage.setStatus(ModelMessageStatusEnum.ACCEPTED);
}
else{
modelMessage.setStatus(ModelMessageStatusEnum.REJECTED);
modelMessage.setReason(MODEL_MESSAGE_0005);
}
modelMessageList.add(modelMessage);
}
return gson.toJson(modelMessageList);
}
对收件人的响应示例:
[{"name":"Arts","status":"ACCEPTED"},{"name":"Business","status":"ACCEPTED"},{"name":"Gaming","status":"ACCEPTED"},{"name":"Deals","status":"REJECTED","reason":"Category rejected because of an unexpected exception, i.e. possibly due to duplicate keys."}]
谢谢你的帮助 :)
最佳答案
您可以将ApplicationContext(假设您有权访问)用作ModelMessage的工厂。但是,那真的必要吗?
关于java - ( Spring )我可以在循环内使用依赖项注入(inject)吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47273736/