Spring Beans:您可以将元素添加到注入列表中吗?
Spring Beans: Can you add elements into an injected list?
我是 Spring Beans 的新手,我正在尝试构建一个实现 CRUD 操作的休息控制器。
我有一个配置文件,其中有一个 @Bean,returns 一个 Book 类型的列表:
@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 方法中,我尝试将来自请求的 book 添加到我的 books 列表中,但是我得到一个 UnsupportedOperationException.
是否无法更改注入的集合,或者应该如何完成?
如果这是出于教程目的,我们可以通过小步骤再次实现。
- 您可以创建一个 class 来托管该列表。
- 我们可以在 class.
中提供 getter 和 setter 方法
- 之后注入此 class。
Class 会变成
//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;
}
...
对于例外情况,请遵循此
我是 Spring Beans 的新手,我正在尝试构建一个实现 CRUD 操作的休息控制器。
我有一个配置文件,其中有一个 @Bean,returns 一个 Book 类型的列表:
@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 方法中,我尝试将来自请求的 book 添加到我的 books 列表中,但是我得到一个 UnsupportedOperationException.
是否无法更改注入的集合,或者应该如何完成?
如果这是出于教程目的,我们可以通过小步骤再次实现。
- 您可以创建一个 class 来托管该列表。
- 我们可以在 class. 中提供 getter 和 setter 方法
- 之后注入此 class。
Class 会变成
//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;
}
...
对于例外情况,请遵循此