spring - Spring Beans:您可以将元素添加到注入列表中吗?
问题描述
我是 Spring Beans 的新手,我正在尝试构建一个实现 CRUD 操作的休息控制器。
我有一个配置文件,其中有一个返回Book类型列表的 @Bean:
@Configuration
public class BookConfig {
@Bean
public static List<Book> books() {
return Arrays.asList(
new Book(1, "ABC", "Author ABC"),
new Book(2, "DEF", "Author DEF"),
new Book(3, "GHI", "Author GHI"));
}
}
我在其中构造函数注入了上述 Bean 的其余控制器:
@RestController
@RequestMapping("/api/v1/books")
public class BookRestController {
private List<Book> books;
@Autowired
public BookRestController(List<Book> books) {
this.books = books;
}
@PostMapping("")
public void registerBook(@RequestBody Book book) {
books.add(book); // this throws **UnsupportedOperationException**
}
}
在 POST 方法中,我尝试将来自请求的书籍添加到我的书籍列表中,但我得到了UnsupportedOperationException。
是否无法更改注入的集合或应该如何完成?
解决方案
如果这是出于教程目的,我们可以通过小步骤再次实现这一点。
- 您可以创建一个托管列表的类。
- 我们可以在该类中提供 getter 和 setter 方法。
- 之后注入这个类。
类将成为
//BadNamedCLass
DataManager {
private final List<Book> books = ArrayList<Book>();
{
// init block to add item to books if you want during initialization
}
// getters
//setters
}
配置变为:
@Configuration
public class BookConfig {
@Bean
public DataManager dataManager() {
return new DataManager();
}
}
控制器代码变为
...
@Autowired
public BookRestController(DataManager dataManager) {
this.dataManager= dataManager;
}
...
对于例外情况,请点击此链接
推荐阅读
- haskell - 如何将数字作为字符串添加到haskell中的字符串
- python - 如何使用 python 执行可恢复的文件上传到 Google Drive
- vb.net - 如果 notEOF 和 bof 已经放了,仍然报错
- c - MPI 进程中 fprintf 的原子性
- python - 检查熊猫 df 中列的值是否在列表中
- react-native - Redux 获取返回空的有效负载数组
- java - 实时缓存 401 中找不到 PayPal 访问令牌
- maven - 运行自由式 maven-gatling 项目时 Jenkins 工作失败
- c++ - 构建统一 2019.1.2 项目时 Xcode 10.2.1 挂起
- javascript - 如何获取日期的年份和月份