SpringBoot PUT接口传参时报int参数无法转null错误如何解决
报错原因
- Java中的基础数据类型(
int、double、long等)属于值类型,本身不支持存储null值,每个基础类型都有默认初始值,比如int默认值为0、double默认值为0.0。 - 你在代码中将
year、price参数标注为@RequestParam(required = false),意味着这两个参数允许不传。当你发起请求未携带这两个参数时,Spring MVC会尝试为这两个参数注入null值,但参数声明的是基础类型int和double,无法接收null,因此触发了报错。
解决方法
将参数的基础类型替换为对应的Java包装类即可,包装类属于引用类型,支持接收null值:
int对应的包装类是Integerdouble对应的包装类是Double
修改后的Controller代码如下:
@PutMapping(path = "{bookId}") public void updateBook( @PathVariable("bookId") Long bookId, @RequestParam(required = false) String title, @RequestParam(required = false) String author, @RequestParam(required = false) Integer year, @RequestParam(required = false) Double price) { bookService.updateBook(bookId, title, author, year, price); }
额外注意事项
- 需要同步修改
bookService.updateBook方法中对应year、price的入参类型为Integer和Double,避免方法调用时类型不匹配。 - 你当前的请求参数是拼接在URL后的查询参数,请求头里的
Content-Type: application/json实际不生效,如果你后续需要用JSON请求体传参,需要调整代码用@RequestBody接收实体类参数。
内容的提问来源于stack exchange,提问作者Vee
相关产品推荐
相关产品推荐

