Java null java.lang.IllegalArgumentException使用If-Statement解析问题

Kit*_*Mad 2 java null parsing if-statement

我在使用java.sql.Date.valueOf(java.lang.IllegalArgumentException)和使用Integer.parseInt(java.lang.NumberFormatException)的整数解析日期时遇到问题.

我有一个表单,要求使用条形码编号,日期和日期使用HTML5和Chrome,这将连接到后台的PostgreSQL数据库,返回带有项目的表格.当指定所有3个时,这非常有效.

但是,我希望用户能够仅使用条形码进行搜索,因此返回所有相关条目,无论日期是什么.同样,只使用日期来获取指定日期之间的任何条目.

这是我的表格:

<th><input type="text" name="barcode" size="20"></th>
        <th><input type="date" name="dateFrom"></th>
        <th><input type="date" name="dateTo"></th>
        <th><input type="submit" value="Submit" /></th>
Run Code Online (Sandbox Code Playgroud)

现在,我理解解析函数不喜欢空值,为此我使用了一个If语句来检查空值并赋值:

Date dateFrom;
String stringDateFrom = request.getParameter("dateFrom");

if (stringDateFrom == null){
        dateFrom = Date.valueOf(LocalDate.MIN);
    } else {
        dateFrom = Date.valueOf(stringDateFrom);
    }
Run Code Online (Sandbox Code Playgroud)

我的理解是If语句检查语句是否为True,如果是,则处理代码并退出,如果语句为False,则跳转到"else"部分并处理其代码.因此,如果我没有为表单中的dateFrom字段输入值,则String'stringDateFrom'将为null,因此If语句的第一部分应该运行并跳过第二部分.

这种情况不会发生,即使是'stringDateFrom'的空值我在If语句的下面一行得到错误'java.lang.IllegalArgumentException',我认为应该跳过它?

dateFrom = Date.valueOf(stringDateFrom);
Run Code Online (Sandbox Code Playgroud)

我得到错误'java.lang.NumberFormatException'与完全相同的设置,但解析一个整数,代码行是;

barcode = Integer.parseInt(stringBarcode);
Run Code Online (Sandbox Code Playgroud)

这是我的解析代码或我的if语句代码吗?

对不起,很长的帖子,我是学生,这是我项目的一部分,我不是贸易的java程序员;-)

感谢您的帮助.

编辑:解决了

感谢unholysampler让我指向正确的方向.问题是setParameter返回一个空的String作为null,因此从未满足条件.

我更改了代码以检查空字符串,或者不是空字符串,它可以工作,即

if (stringDateFrom == null)if (stringDateFrom.equals(""))

if (stringBarcode != null)if (!stringBarcode.equals(""))

感谢你的帮助.

编辑:Stacktrace

'java.sql.Date.valueOf(Date.java:143)'中的行是指代码;

if (d == null) {
            throw new java.lang.IllegalArgumentException();
        }
Run Code Online (Sandbox Code Playgroud)

在java.sql.Data中

Warning:   StandardWrapperValve[logListServlet]: Servlet.service() for servlet logListServlet threw exception java.lang.IllegalArgumentException

at java.sql.Date.valueOf(Date.java:143)
at org.mypackage.HOIS.logListServlet.doPost(logListServlet.java:57)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:318)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:357)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)
at java.lang.Thread.run(Thread.java:744)
Run Code Online (Sandbox Code Playgroud)

Eel*_*Lee 7

Date.valueOf(String s)文档清楚地说明了它

抛出

IllegalArgumentException - 如果给定的日期不是JDBC日期转义格式(yyyy- [m] m- [d] d)

所以我想你应该先检查一下日期的格式.

编辑:

随着问题的解决 - 在这种情况下,正如作者所说,问题是输入String是空的("").因此,对于将来遇到同样问题的其他人 - 请检查这种可能性.