Spring Boot按ID删除H2数据库Room实体报错:给定ID不得为null
故障原因
抛出The given id must not be null错误的直接原因是传入JPAdeleteById方法的ID参数为null,根本问题出在Controller层的参数绑定逻辑:@DeleteMapping("{roomNr}")定义的路径变量没有做显式绑定,Spring无法从URL路径中提取roomNr的值注入方法参数,无论请求路径里传什么ID,方法拿到的roomNr都是null。
修复方法
给Controller方法的roomNr参数添加@PathVariable注解,明确告知Spring该参数从URL路径片段中取值,修改后代码如下:
@CrossOrigin @DeleteMapping("{roomNr}") public void deleteOneZimmer(@PathVariable Integer roomNr){ roomService.deleteOneRoom(roomNr); }
补充说明
- POST请求调试通过是因为POST接口一般使用
@RequestBody接收请求体参数,绑定逻辑不受本次问题影响 - 修复后重新请求
room/1这类路径,Spring会自动把路径中的数字值提取赋值给roomNr,删除逻辑即可正常执行 - 手动指定实体类ID(房间号)的配置没有问题,不需要额外配置ID自增策略
内容的提问来源于stack exchange,提问作者baphomet
相关产品推荐
相关产品推荐

