我遇到了一个非常奇怪的问题。我正在尝试在我的应用程序中实现登录服务。当我通过正确的电子邮件和密码服务返回响应按预期(意味着没有错误来)但当我有意识地传递错误的电子邮件或密码时,geInputStream()方法抛出FileNotFoundException。我不知道这背后的原因是什么。此外,在调用getInputStream()方法之前我也检查了状态代码(当我故意传递错误的电子邮件和密码时就是这种情况)。状态代码是500.I检查500,这是内部服务器错误。我的问题是为什么会这样?我的意思是故意传递错误的电子邮件或密码为什么内部服务器发生?还有一件事我想提一下,我已经在post man上检查了相同的服务,它正如预期的那样正常工作。如果我传递错误的电子邮件或密码postman返回预期的错误。以下是我正在使用的代码
private String invokeWebservice() {
String data = null;
HttpURLConnection conn = null;
BufferedReader in = null;
try {
String webservice = Constants.BASE_URL + serviceName;
LogUtility.debugLog("webservice just called "+ webservice);
URL url = new URL(webservice);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setUseCaches(false);
if (isPost) {
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("Accept", "application/json");
Writer writer = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
if (jsonObject != null)
writer.write(jsonObject.toString());
writer.close();
}
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuffer sb = new StringBuffer("");
String l = "";
String nl = System.getProperty("line.separator");
while ((l = in.readLine()) != null)
sb.append(l + nl);
in.close();
data = sb.toString();
return data;
} catch (Exception e) {
LogUtility.errorLog("exception while calling web service");
} finally {
try {
if (conn != null)
conn.disconnect();
if (in != null)
in.close();
} catch (Exception ex) {
// LogUtility.errorLogWithException(ex, ex.getMessage());
}
}
return data;
}
任何帮助?
答案 0 :(得分:0)
现在花了一些时间后,我能够解决我的问题。为别人提供答案。将错误的电子邮件和密码传递给服务是正确的,服务器也在使用这些参数,因为有错误(因为电子邮件和密码),这就是它返回500代码的原因。所以,我检查状态代码是否为200然后我使用了getInputStream()方法,否则我调用了getErrorStream()方法。通过这种方式,我得到了具有错误属性的流(此属性包含错误详细信息)。以下是我使用的代码
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
in = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
} else {
in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
}
希望它也有助于其他人。