java - 春季可以根据日期查找数据
问题描述
我正在尝试根据日期查找数据抛出异常
java.lang.IllegalArgumentException:空
@SuppressWarnings("deprecation")
@GetMapping("/product-DateList/{pathDate}")
public ModelAndView getFindByDateOfPurchase(@PathVariable("pathDate") String pathDate) {
Date convertDate = new Date(pathDate);
//Date Converted according to dataBase Format
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = sdf.format(convertDate);
Date date = null;
try {
date = DateFormat.getInstance().parse(strDate);
} catch (ParseException pe) {
pe.printStackTrace();
}
List<Product> dateofPurchaseList = grofersService.findByDateOfPurchase(date);
Optional<List<Product>> optional = Optional.of(dateofPurchaseList);
if (!optional.isPresent()) {
logger.warn("Not Found Product");
return new ModelAndView("notFound");
}
logger.info("Fetching Product according to Date");
return new ModelAndView("productList", "dateofPurchaseList", dateofPurchaseList);
}
异常(打印堆栈跟踪)
java.lang.IllegalArgumentException: null
at java.util.Date.parse(Unknown Source) ~[na:1.8.0_172]
at java.util.Date.<init>(Unknown Source) ~[na:1.8.0_172]
at com.javabootstar.controller.GrofersController.getFindByDateOfPurchase(GrofersController.java:66) ~[classes/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_172]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_172]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_172]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_172]
at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133) ~[spring-web-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635) ~[tomcat-embed-core-8.5.31.jar:8.5.31]
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) ~[spring-webmvc-4.3.18.RELEASE.jar:4.3.18.RELEASE]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) ~[tomcat-embed-core-8.5.31.jar:8.5.31]org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.31.jar:8.5.31]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_172]
在google中搜索这个问题没有找到这类问题,如何根据日期查找数据。
解决方案
您发布的代码有几个问题,更重要的是这不会编译。
Date convertDate = new Date
- 这显然是错误的。无论如何,忽略这一点还有几个问题:
您似乎传递了一个路径变量pathDate
,我认为您需要使用该变量进行搜索。这从不在方法的主体中使用。相反,您(以错误的方式)创建了一个名为convertDate
. 您继续将其转换为字符串,而没有明显的原因和用法。
然后,您继续创建一个名为的新变量date
,您尝试使用该strDate
变量对其进行初始化。所有这些行为根本上都是错误的。此外,您从 String 到 date 的转换也是错误的(因此您会收到 IllegalArgumentException)。
您不应该使用父类 ( DateFormat
) 来执行日期转换,而是需要使用它的某些实现来执行转换(DateFormat
是抽象的,直接实现是SimpleDateFormat
)。
基于上述情况,您应该执行以下操作:
从路径变量中获取日期。
使用 SimpleDateFormat 转换为日期对象(或者您可以使用 Java 8 的 LocalDate API)
然后将此日期传递给您的服务方法,该方法将从存储库中获取结果。
还有一些笔记。没有必要这样做:
Optional<List<Product>> optional = Optional.of(dateofPurchaseList);
假设您的服务方法返回一个产品列表或如果没有找到一个空列表,则后续dateofPurchaseList
将永远不会为空。of
使用静态创建器(假定非空)将其包装到可选中是错误的。您应该简单地调用List#isEmpty
以检查返回的列表是否为空或包含任何值。
推荐阅读
- c# - 时间:2019-01-10 标签:c#bookmark.zip文件嵌入对象
- json - Json 对象选择
- javascript - Highcharts:类别定位以匹配日期时间列
- laravel-5 - 如果多于一个,如何搜索收藏?
- php - 如何使用 php 文件作为数组,而不是 Laravel 5 中的类?
- microsoft-translator - 如何处理 MS Hub 字典文件中源术语的多个目标翻译
- python - 从正在导入的模块中获取变量
- excel - 如何在 VBA 中调暗和设置变量工作簿名称?
- php - 文件不会使用 Imagick 保存
- javascript - 如何使用 Firebase 的 Dialogflow Fulfillment 获取数据