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"); }
快速排查步骤
- 先看异常栈的顶部调用位置,确定是视图渲染阶段还是后端数据绑定阶段抛出的异常
- 检查对应代码里,有没有直接对
ArrayList(或者其他集合)调用实体属性的情况 - 顺便确认你的实体类确实有符合规范的
getId()方法(虽然这个异常不是实体的问题,但可以排除其他干扰)
内容的提问来源于stack exchange,提问作者Endriyas
相关产品推荐
相关产品推荐

