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

Spring项目通过rental_id创建Expenses对象报原始类型参数空转换错误如何解决?

错误原因排查

报错的核心原因是Spring MVC在处理请求参数时,尝试给声明为基本类型int的rental_id赋值null,而基本类型不支持null值,触发类型转换异常。具体问题出在以下几个位置:

  • Post接口的参数没有指定绑定规则,且使用了不支持null的基本类型:你写的@PostMapping方法中int rental_id没有加任何参数绑定注解,Spring默认将其识别为请求参数,且因为是基本类型默认必填,如果你提交的表单没有传递该参数,Spring会尝试注入null直接触发报错。
  • Get跳转表单页时没有传递rental_id到前端:你的@GetMapping方法拿到了路径上的rental_id,但是没有放到Model中返回给前端页面,导致表单提交时没有携带该参数。
  • Repository层SQL语法错误:INSERT语句不支持WHERE条件,你当前的写法是完全错误的,插入新记录需要把rental_id作为插入字段之一写入字段列表。
修复步骤
  1. 修正Get接口,把rental_id传到前端
@GetMapping("/createExpenses/{rental_id}")
public String createExpenses(@PathVariable("rental_id") int rental_id, Model model){
    // 把rental_id存入model,给前端表单用
    model.addAttribute("rental_id", rental_id);
    return "home/createExpenses";
}
  1. 在前端表单createExpenses.html中添加隐藏域,提交时携带rental_id
<!-- 放在form标签内部即可 -->
<input type="hidden" name="rental_id" th:value="${rental_id}">
  1. 修正Post接口的参数声明,明确参数绑定规则
@PostMapping("/createExpenses")
// 加@RequestParam明确绑定请求参数,要求必填的话无需改为Integer,确保前端传参即可
public String createExpenses(@ModelAttribute Expenses expenses, @RequestParam("rental_id") int rental_id){
    expensesService.createExpenses(expenses, rental_id);
    return "home/succesExpense";
}
  1. 修正Repository层的插入SQL,把rental_id加入插入字段
public Expenses createExpenses(Expenses e, int rental_id){
        // 把rental_id加到插入字段列表,删除错误的WHERE条件
        String sql = "INSERT INTO expenses (rental_id, base_cost, rental_end_date, end_time, drop_off, drop_off_extra, km_end, repair_fee, fuel_level, full_price) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
        template.update(sql, rental_id, e.getBase_cost(), e.getRental_end_date(), e.getEnd_time(), e.getDrop_off(), e.getDrop_off_extra(), e.getKm_end(), e.getRepair_fee(), e.getFuel_level(), e.getFull_price());
        return null;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 06:36:06