springframework-传递rental_id以生成一个expense对象



我正在尝试创建一个spring项目,在那里我想从rental_id中创建一个名为"Expenses"的对象。但每当我尝试并按下create时,我都会得到一个白标签错误。

这是错误消息:

java.lang.IllegalStateException: Optional int parameter 'rental_id' is present but cannot be translated into a null value due to being declared as a primitive type. Consider declaring it as object wrapper for the corresponding primitive type.

以下是来自homecontroller和repo的代码:

@GetMapping("/createExpenses/{rental_id}")
public String createExpenses(@PathVariable("rental_id") int rental_id, Model model){
return "home/createExpenses";
}
@PostMapping("/createExpenses")
public String createExpenses(@ModelAttribute Expenses expenses, int rental_id){
expensesService.createExpenses(expenses, rental_id);
return "home/succesExpense";
}
public Expenses createExpenses(Expenses e, int rental_id){
String sql = "INSERT INTO expenses (base_cost, rental_end_date, end_time, drop_off, drop_off_extra, km_end, repair_fee, fuel_level, full_price) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) where rental_id = ?;";
template.update(sql, 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(), rental_id);
return null;
}

错误消息中有一条线索。如果使用基元int,则它不能具有null值。如果未初始化,它将具有0。如果您希望它是一个选项,您可以为此变量使用包装类(Integer(。

我想您正试图使用post-mapping方法创建一个用户。您使用@ModelAttribute获得Expenses,这是正确的,但同时您没有提取rental_id。得到的是Expense自变量和空rental_id。由于不能将null分配给rental_id,因此会引发错误。

你能做什么

  1. 您可以创建一个同时具有Expenserental_id字段的POJO类。然后使用它,就像您当前处理Expense参数一样
  2. rental_id作为@PathVariable传递,就像您在第一个方法中所做的那样

最新更新