Java 正在尝试通过thymeleaf/spring引导中的@PathVariable传递两个对象
我试图使用@PathVariable注释提取两个参数,但由于java向我抛出了一个错误,它将条目id(我当前的条目id长度)作为字符串引用,因此未能成功 控制器:Java 正在尝试通过thymeleaf/spring引导中的@PathVariable传递两个对象,java,spring,thymeleaf,Java,Spring,Thymeleaf,我试图使用@PathVariable注释提取两个参数,但由于java向我抛出了一个错误,它将条目id(我当前的条目id长度)作为字符串引用,因此未能成功 控制器: @PostMapping("/purchaseToner/{tid}/{bid}") public String buyToner(Model model, @PathVariable("tid") Long tid, @PathVariable("bid") Long b
@PostMapping("/purchaseToner/{tid}/{bid}")
public String buyToner(Model model, @PathVariable("tid") Long tid,
@PathVariable("bid") Long bid){
//Grab info
Buyer mBuyer = buyerService.findOne(bid);
Toner mToner = tonerService.findOneToner(tid);
//Updating qualities
mToner.setTonerQuantity(mToner.getTonerQuantity() - 1);
mBuyer.setBalance(mBuyer.getBalance() - mToner.getTonerPrice());
Buyer iBuyer = new Buyer();
iBuyer.getToners().add(mToner);
return "redirect:/";
}
视图:
将th:action更改为following
<form th:action="@{/purchaseToner/{tid}/{bid}(tid=${toner.id},bid=${buyer.buyerId})}" th:object="${buyer}" method="post">
此外,您还需要为spring型号添加碳粉。在您的代码中,它不在模型中您的apibuyToner没有接收路径变量作为数字的输入。您的api服务没有问题;检查您的客户端代码,它是否以正确的格式发送请求或您是否使用任何restclient测试了您的api 查看java异常
java.lang.NumberFormatException: For input string: "{tid}(tid=${toner.id})"
这里的输入不是数字。为什么呢?试着改变这一点:
@PostMapping("/purchaseToner/{tid}/{bid}")
public String buyToner(Model model, @PathVariable("tid") Long tid,
@PathVariable("bid") Long bid){
...
}
@PostMapping("/purchaseToner/{tid}/{bid}")
public String buyToner(Model model, @PathVariable("tid") String tid,
@PathVariable("bid") String bid){
long bidlong = Long.parseLong(bid)
long tidlong = Long.parseLong(tid)
//Grab info
Buyer mBuyer = buyerService.findOne(bid);
Toner mToner = tonerService.findOneToner(tid);
...
}
进入这个:
@PostMapping("/purchaseToner/{tid}/{bid}")
public String buyToner(Model model, @PathVariable("tid") Long tid,
@PathVariable("bid") Long bid){
...
}
@PostMapping("/purchaseToner/{tid}/{bid}")
public String buyToner(Model model, @PathVariable("tid") String tid,
@PathVariable("bid") String bid){
long bidlong = Long.parseLong(bid)
long tidlong = Long.parseLong(tid)
//Grab info
Buyer mBuyer = buyerService.findOne(bid);
Toner mToner = tonerService.findOneToner(tid);
...
}
换句话说,将控制器的参数更改为字符串类型,然后将其转换为Long。能否在控制器中运行此代码并重试<代码>@PostMapping(“/purchaseToner/{tid}/{bid}”)公共字符串buytone(模型模型,@PathVariable(“tid”)字符串tid,@PathVariable(“bid”)字符串bid){Long extractedId=Long.valueOf(tid).longValue();Long extractedBid=Long.valueOf(bid).longValue();//Grab info Buyer mBuyer=buyerService.findOne(extractedBid);Toner mToner=tonerService.findOneToner(extractedId);}为什么要添加两个对象?Toner对象可以添加为模型属性,同时将“buyer”保留为表单对象您在thymleaf模板中的url有缺陷。您应该首先定义属性,然后替换它们。类似于
@{/purchaseToner/{tid}/{bid}(tid=${toner.id},bid=${buyer.buyerId})的东西应该可以做到这一点。有关更多信息,请参阅Thymeleaf。一个小的更正。buyer-mBuyer=buyerService.findOne(mBuyer);toner-mToner=tonerService.findOneToner(mToner);
notbuyer-mBuyer=buyerService.findOne(投标);Toner mToner=tonerService.findOneToner(tid);