我目前正在使用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/

10-12 15:33
查看更多