【问题标题】:it is possible to find data according to date in spring春季可以根据日期查找数据
【发布时间】:2018-12-23 03:52:07
【问题描述】:

我正在尝试根据日期查找数据抛出异常

java.lang.IllegalArgumentException: null

@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搜这个问题没有找到这类问题,如何根据日期查找数据。

【问题讨论】:

  • 请发布整个堆栈跟踪。
  • 你能分享整个堆栈跟踪吗?
  • 好的,我会分享。
  • GrofersController.java 第 66 行中,您使用日期为 null 进行操作。
  • 但是如何根据日期查找数据。

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


【解决方案1】:

您发布的代码有几个问题,更重要的是无法编译。

Date convertDate = new Date - 这显然是错误的。无论如何,不​​管这一点,还有几个问题:

您似乎传递了一个路径变量pathDate,我认为您需要使用它进行搜索。这从不在方法的主体中使用。相反,您(以错误的方式)创建了一个名为 convertDate 的新变量。您继续将其转换为字符串,而没有明显的原因和用法。

然后您继续创建一个名为date 的新变量,您尝试使用strDate 变量对其进行初始化。所有这些行为根本上都是错误的。此外,您从 String 到 date 的转换也是错误的(因此您会收到 IllegalArgumentException)。

您不应该使用父类 (DateFormat) 来执行日期转换,而是需要使用它的某些实现来执行转换(DateFormat 是抽象的,直接实现是 SimpleDateFormat)。

基于以上,你应该做到以下几点:

  • 从路径变量中获取日期。

  • 使用 SimpleDateFormat 转换为日期对象(或者 您可以使用 Java 8 的 LocalDate API)

  • 然后将此日期传递给您的服务方法,该方法将获取 来自存储库的结果。

还有一些注意事项。没有必要这样做:

Optional&lt;List&lt;Product&gt;&gt; optional = Optional.of(dateofPurchaseList);

假设您的服务方法返回一个产品列表或如果没有找到一个空列表,则后续的dateofPurchaseList 将永远不会为空。使用 of 静态创建者(假定非空)将其包装成一个可选的 是错的。您应该简单地调用List#isEmpty 来检查返回的列表是否为空或包含任何值。

【讨论】:

  • 谢谢你发现我的错误我会纠正这是错误@Aris
【解决方案2】:

在仓库界面使用这个

@Query("select e from Entity where e.dateOfPurchase like %:dateOfPurchase%")
List<Entity> findByDateOfPurchase(@Param("dateOfPurchase ")String dateOfPurchase );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 1970-01-01
    • 2019-06-30
    相关资源
    最近更新 更多