我正在尝试根据日期查找数据引发异常
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);
}
异常(PrintStacktrace)
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中搜索此问题找不到此类型的问题,如何根据日期查找数据。
答案 0 :(得分:1)
您发布的代码存在多个问题,更重要的是,它们无法编译。
Date convertDate = new Date
-这显然是错误的。无论如何,都存在更多问题:
您似乎传递了一个路径变量pathDate
,我认为您需要进行搜索。该方法的主体中从未使用过此方法。相反,您以错误的方式创建了名为convertDate
的新变量。没有明显的原因和用法,您将继续转换为字符串。
然后,您继续创建一个名为date
的新变量,尝试使用strDate
变量进行初始化。所有这些行动从根本上是错误的。同样,从String到date的转换也是错误的(因此为什么会收到IllegalArgumentException)。
您不应该使用父类(DateFormat
)来执行日期转换,而是需要使用它的某些实现来执行转换(DateFormat
是抽象的,直接实现是{ {1}}。
基于上述内容,您应该执行以下操作:
从路径变量中获取日期。
使用SimpleDateFormat转换为日期对象(或者 您可以使用Java 8的LocalDate API)
然后将此日期传递给您的服务方法,该方法将获取 存储库中的结果。
还有一些注意事项。不需要这样做:
SimpleDateFormat
假设您的服务方法返回产品列表或空列表(如果未找到),则后续的Optional<List<Product>> optional = Optional.of(dateofPurchaseList);
将永远不会为null。使用dateofPurchaseList
静态创建者(假定非null)将其包装为可选内容
是错的。您应该简单地调用of
来检查返回的列表是否为空或包含任何值。
答案 1 :(得分:0)
在存储库界面中使用此
@Query("select e from Entity where e.dateOfPurchase like %:dateOfPurchase%")
List<Entity> findByDateOfPurchase(@Param("dateOfPurchase ")String dateOfPurchase );