当前位置: 首页 > 知识库问答 >
问题:

Spring Beans:可以将元素添加到注入列表中吗?[重复]

颛孙成益
2023-03-14

我在Spring Beans很新,我正在尝试构建一个实现CRUD操作的Rest控制器。

我有一个配置文件,其中有一个@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"));
    }
}

我在rest控制器中构造注入了上面的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方法中,我尝试将来自请求的书籍添加到我的书籍列表中,但我得到了Un支撑操作异常。

是不是不可能改变注入的集合,或者应该如何做?

共有1个答案

包阳成
2023-03-14

如果这是为了教程的目的,我们可以再次用小步骤来实现这一点。

  • 您可以创建承载列表的类。
  • 我们可以在该类中提供获取器和设置器方法。
  • 之后注入此类。

类将成为

//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;
    }
...

例外情况请点击此链接

 类似资料:
  • 问题内容: 在当前正在研究的学习项目中,我需要添加一个属性,其值为数字。 如果我创建自己的属性,说“ messid”并为其分配一个数字值,例如“ 12”,“ 6”等,可以吗? 这就是为什么我要这样做,以便如果我做错了,则可以纠正我:我需要在我的JavaScript中(使用jQuery)访问此数字。仅获取attribute的值很容易,但是从诸如“m12”或“ m6”之类的字符串中提取数字值很麻烦。(

  • 问题内容: 我的问题是我想在遍历新元素的同时扩展一个包含新元素的列表,并且希望迭代器继续刚才添加的元素。 根据我的理解,会在列表中的当前元素之前而不是之后添加一个元素。是否可以通过其他方式实现这一目标? 问题答案: 除了以外,您无法在修改集合时使用进行迭代。 但是,如果使用方法,该方法返回,并对其进行迭代,则您还有更多要修改的选项。从javadoc中获取: 新元素插入到隐式光标之前:…后续调用将返

  • < code>list_of_lists=[[1,2,3],[4,5,6]] < br > < code > list _ to _ add =[" A "," B "," C"] 我希望结果是list_of_lists会变成: 谢谢!

  • 我有一个熊猫数据框,其中一列由列表组成: 我想添加,例如,每个列表的第一个和最后一个索引。为此,我使用: 这分别作用于每一行,如果数据帧很大,这可能会非常密集。有没有办法将此操作矢量化?

  • 问题内容: 我想避免。我该怎么办? 问题答案: 您可以在迭代本身期间使用支持remove / add方法的。

  • 问题内容: 这个清单对象在咬我屁股。 每当我尝试向其中添加元素时,它都会产生以下结果: 产生错误的行无关紧要,但无论如何这里都是这样: 我不应该静态访问它吗? 变量的实际声明: 有任何想法吗?在Google上找不到任何值得的东西。 问题答案: Arrays.asList()将给您返回不可修改的列表,这就是为什么添加失败的原因。尝试使用以下方法创建列表: