我正在尝试创建一个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
,因此会引发错误。
你能做什么
- 您可以创建一个同时具有
Expense
和rental_id
字段的POJO类。然后使用它,就像您当前处理Expense
参数一样 - 将
rental_id
作为@PathVariable
传递,就像您在第一个方法中所做的那样