You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 1.5.9.RELEASE运行Web应用报NotReadablePropertyException错误求助

解决Spring Boot 1.5.9.RELEASE中的NotReadablePropertyException异常

这个异常的核心原因很明确:你在尝试从java.util.ArrayList对象上读取id属性,但ArrayList本身根本没有这个属性,也不存在对应的getId()方法,自然会抛出这个错误。我帮你梳理几个最常见的场景和对应的解决办法:

1. 视图层(如Thymeleaf/JSP)的遍历错误

这是最容易踩的坑——你可能在视图里直接对集合对象操作,而没有遍历到具体的实体元素。

比如错误的Thymeleaf写法:

<!-- 错误:直接对ArrayList取id属性 -->
<span th:text="${userList.id}"></span>

正确的做法是先遍历集合,拿到每个实体对象后再访问属性:

<!-- 正确:遍历集合,获取单个实体再取id -->
<div th:each="user : ${userList}">
  <span th:text="${user.id}"></span>
</div>

2. Controller层的数据绑定错误

如果是在后端接收请求参数时抛出的异常,大概率是你把数据绑定的目标搞错了——比如试图把请求参数绑定到集合本身,而非集合内的实体。

举个批量提交数据的例子,表单字段应该用索引式命名,而不是直接写id:

<!-- 批量提交时的正确表单字段名 -->
<input type="hidden" name="users[0].id" value="1"/>
<input type="hidden" name="users[1].id" value="2"/>

对应的Controller方法可以接收包含集合的对象,或者直接接收List<User>:

// 方式1:接收包含集合的表单对象
@PostMapping("/batch-save")
public String batchSave(@ModelAttribute UserBatchForm form) {
    userService.saveAll(form.getUsers());
    return "success";
}

// 方式2:直接接收List<User>
@PostMapping("/batch-save")
public String batchSave(@RequestParam List<User> users) {
    userService.saveAll(users);
    return "success";
}

3. 手动操作Spring Bean工具类时的误用

如果你在代码里手动使用了BeanWrapperImpl、PropertyAccessor这类工具,要确保你操作的是集合里的单个实体对象,而不是集合本身。比如:

错误的写法:

// 错误:试图从ArrayList读取id属性
BeanWrapper wrapper = new BeanWrapperImpl(userList);
Object id = wrapper.getPropertyValue("id");

正确的写法:

// 正确:先获取集合里的实体,再读取属性
if (!userList.isEmpty()) {
    BeanWrapper wrapper = new BeanWrapperImpl(userList.get(0));
    Object id = wrapper.getPropertyValue("id");
}

快速排查步骤

  1. 先看异常栈的顶部调用位置,确定是视图渲染阶段还是后端数据绑定阶段抛出的异常
  2. 检查对应代码里,有没有直接对ArrayList(或者其他集合)调用实体属性的情况
  3. 顺便确认你的实体类确实有符合规范的getId()方法(虽然这个异常不是实体的问题,但可以排除其他干扰)

内容的提问来源于stack exchange,提问作者Endriyas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:42:57