Spring Boot中POST请求添加用户报错java.lang.UnsupportedOperationException
问题分析:向列表添加用户时抛出UnsupportedOperationException
使用Postman发送POST请求添加普通用户,请求体已正常接收,但执行列表add操作时抛出异常。
相关代码
@PostMapping public Developer create(@RequestBody Developer developer) { System.out.println(developer); this.DEVELOPERS.add(developer); return developer; }
报错日志
2022-09-11 23:19:53.444 ERROR 30036 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.UnsupportedOperationException] with root cause java.lang.UnsupportedOperationException: null at java.base/java.util.ImmutableCollections.uoe(ImmutableCollections.java:142) ~[na:na] at java.base/java.util.ImmutableCollections$AbstractImmutableCollection.add(ImmutableCollections.java:147) ~[na:na] ...
原因
DEVELOPERS是不可变集合,比如通过List.of()、Arrays.asList()创建,或是Spring框架中某些方法返回的不可变集合实例。这类集合设计为只读,不支持add、remove等修改操作,调用时就会抛出UnsupportedOperationException。
解决方案
- 直接初始化可变集合
将DEVELOPERS的初始化改为可变的ArrayList:
private List<Developer> DEVELOPERS = new ArrayList<>();
- 转换现有不可变集合
如果DEVELOPERS是从其他不可变集合获取的,将其包装为可变集合:
// 假设原集合为immutableDevelopers this.DEVELOPERS = new ArrayList<>(immutableDevelopers);
内容的提问来源于stack exchange,提问作者user19862959
相关产品推荐
相关产品推荐

