[英]Java String to Long Conversion
我知道一個簡單的問題,但我看不出有什么問題。 我有以下代碼:
String dxorderId = request.getParameter("orderid");
long orderid = Long.parseLong((dxorderId));
它位於從PL / SQL過程調用的servlet內部。 dxorderid的值是從所調用頁面的URL中的參數中檢索的。 因此,它似乎被視為字符串。 因此,我必須將字符串轉換為long。 但是,當我使用上面的代碼時,出現以下錯誤:
14-Nov-2013 13:07:41 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [com.zf.proceed.service.servlets.ViewOrderServlet] in context with path [/webapp] threw exception
java.lang.NumberFormatException: null
at java.lang.Long.parseLong(Long.java:372)
at java.lang.Long.parseLong(Long.java:461)
at com.zf.proceed.service.servlets.ViewOrderServlet.doRequest(ViewOrderServlet.java:28)
at com.zf.proceed.service.servlets.ProceedBaseServlet.doRequest(ProceedBaseServlet.java:106)
at com.zf.proceed.service.servlets.ProceedBaseServlet.doGet(ProceedBaseServlet.java:39)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
我知道這意味着無法解析,但我不知道為什么無法解析。 輸入的值是1454。
恐怕值不是1454
。 該值為null
,如以下行所示:
java.lang.NumberFormatException: null
您需要檢查參數名稱,並確保使用正確的名稱,包括大小寫和不可見字符。
java.lang.NumberFormatException: null
如果String dxorderId
為null,則它將引發NumberFormatException
解
檢查dxorderId
不為null
且不為empty string
if(dxorderId != null && !dxorderId.equals(""))
{
long orderid = Long.parseLong((dxorderId));
}
來自oracle docs NumberFormatException
public class NumberFormatException
extends IllegalArgumentException
引發以指示應用程序已嘗試將字符串轉換為數字類型之一,但是該字符串沒有適當的格式。
使用createLong或toLong從Apache的NumberUtils方法。
仔細看看該異常: java.lang.NumberFormatException: null
上面的語句表明dxorderId
值為null。 問題是這條線:
String dxorderId = request.getParameter("orderid");
好吧, NumberFormatException
意味着給定的數據不能轉換為Long
因為它不表示Long
值,因此問題出在String的源頭,而不是Java Long-Parser。
在您的特定情況下,解析器指出給定的值為null
,因此您的request.getParameter("orderid");
返回null
。
java.lang.NumberFormatException: null
從異常信息中,我們可以了解到dxorderid為null ,這會導致java.lang.NumberFormatException
。
在解析數據之前,您需要先檢查要解析的值是null還是空 。
錯誤是由於此行。
String dxorderId = request.getParameter("orderid");
檢查參數名稱“ orderid”是否正確,或確保其值不為null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.