可以根据春季的日期查找数据

时间:2018-07-15 10:41:30

标签: java spring date spring-mvc spring-boot

我正在尝试根据日期查找数据引发异常

  

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中搜索此问题找不到此类型的问题,如何根据日期查找数据。

2 个答案:

答案 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 );