java - 参数值 [1] 与预期类型不匹配
问题描述
在 Spring-boot 项目中,我尝试将 Date 对象作为请求参数传递并得到此错误:
Parameter value [1] did not match expected type [java.util.Date (n/a)]
这是我发送的 http-requset:
http://localhost:8080/moneyManager/customer/actionBetweenDates?startDate=2019/07/01&endDate=2019/07/30
这是在其余部分触发的功能:
@RequestMapping(path="actionBetweenDates", method=RequestMethod.GET)
public Collection<Action> getActionByDate(@RequestParam Date startDate, @RequestParam Date endDate){
return customerService.getAllActionBetweenDate(getSession().getId(), startDate, endDate);
}
休息中的功能触发服务中的功能:
public Collection<Action> getAllActionBetweenDate(long customerId, Date startDate, Date endDate) {
Collection<MethodPayment> customerMethodPayments = methodPaymentRepository.findByCustomerId(customerId);
Collection<Action> customerActionByDates = new ArrayList<>();
for (MethodPayment mp : customerMethodPayments) {
customerActionByDates
.addAll(actionRepository.findByDateBetweenAndMethodPaymentId(mp.getId(), startDate, endDate));
}
return customerActionByDates;
}
服务中的函数触发存储库中的函数:
Collection<Action> findByDateBetweenAndMethodPaymentId(long methodPaymentId, Date startDate, Date endDate);
我究竟做错了什么?
更新:
我发现了问题。该问题与在 actionRepository 中找到的函数有关。该函数的签名首先要求两个日期在它们之间进行比较,然后 id 和我给它相反的值。对我来说很清楚,在我开始使用它之后,我会遇到日期问题,所以答案确实对我有所帮助。谢谢你们!
解决方案
将控制器方法更改为:
@RequestMapping(path="actionBetweenDates", method=RequestMethod.GET)
public Collection<Action> getActionByDate(@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate, @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date endDate){
return customerService.getAllActionBetweenDate(getSession().getId(), startDate, endDate);
}
检查Annotation Type DateTimeFormat以获取详细信息,有关用法示例请查看在 Spring 中使用日期参数
UPD 1:
添加示例@SpringBootApplication
类和示例请求:
@SpringBootApplication
@RestController
public class DateProblemApp {
public static void main(String[] args) {
SpringApplication.run(DateProblemApp.class, args);
}
@RequestMapping(path="actionBetweenDates", method = RequestMethod.GET)
public String getActionByDate(@RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date startDate, @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date endDate) {
return "ok";
}
}
示例请求:http://localhost:8080/actionBetweenDates?startDate=2019/07/01&endDate=2019/07/30
推荐阅读
- hyperledger-fabric - 在 fabric-samples 中使用 couchdb 选项时,无法在 Hyperledger Fabric 1.3 中实例化链代码
- ios - 运行命令 shell 脚本 [cp] embed pods framework' 0.2 seconds Command PhaseScriptExecution failed with a nonzero exit code
- jasper-reports - 应用条件格式时子报表周围出现不需要的边框
- python - POST 请求方法在 Django Rest 框架中不起作用
- node.js - 如何使用带有 mocha 的 await 和 ESM 获取 selenium 驱动程序?
- java - 使用表达式委托而不是 Java 类有什么好处?
- dart - 在 Flutter 中定义 const 级别的类
- angular - ngIf 单行 if 语句 | 角 6
- ole - 从 SQL Server 2017 调用 Web 服务 - sp_OAMethod - 无法建立与服务器的连接
- java - 比较方法