#java #jersey
#java #джерси
Вопрос:
я пытаюсь добавить следующие заголовки в вызов rest Post… он работает на обычном Java, но я пытаюсь переписать его, используя клиентскую библиотеку Джерси… Когда я создаю сообщение с помощью Jersey, я получаю код ошибки, которого нет в документации API, поэтому я знаю, что это должна быть просто небольшая проблема, например, отсутствующий заголовок… Есть идеи, что я делаю неправильно в нижней функции?
Простая функция добавления заголовков Java, которая работает:
private void SetDefaultHeaders(HttpURLConnection conn) {
setRequestProperty(conn, "Accept", "*");
setRequestProperty(conn, "Content-Type", "application/x-www-form-urlencoded");
}
Код Джерси:
public void logIn(String email, String password) {
if (email != "" amp;amp; email != null amp;amp; password != "" amp;amp; password != null) {
try {
StringBuilder sb = new StringBuilder();
sb.append(Settings.WIFIPLUG_URL);
sb.append("/user_login");
MultivaluedMap<String, String> body = new MultivaluedMapImpl();
body.add("username=", email);
body.add("password=", password);
System.out.println("login url: " sb.toString());
WebResource webResource = Client.create(new DefaultClientConfig()).resource(sb.toString());
WebResource.Builder builder = webResource.accept("*");
builder.type("application/x-www-form-urlencoded");
ClientResponse response = builder.post(ClientResponse.class, body);
if (response.getStatus() != 200) {
throw new RuntimeException("failed: http error code " response.getStatus());
}
System.out.println("Response from server: " response.getEntity(String.class));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Полная ванильная функция входа в Java:
public String postUserLogin(String username, String password) {
String result = "";
// URL for API to login
String url = "https://wifiplugapi.co.uk:3081/zcloud/api/user_login";
String requestParams = "username=" username "amp;password=" password;
try {
URL obj = new URL(url);
System.out.println("login url: " obj);
// Opens the connection
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
// Send POST request
con.setDoOutput(true);
con.setDoInput(true);
// Request Headers
con.setRequestMethod("POST");
// Sets all the headers
SetDefaultHeaders(con);
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
wr.write(requestParams);// adds values to the request
wr.flush();
wr.close();
// Handles the response
StringBuilder sb = new StringBuilder();
int responseCode = con.getResponseCode();
if (responseCode == 200) {
// if the request was successful OK = 200
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line "n");
}
br.close();
// Returns Token
} else {
// If the request was bad, reason will be printed
result = "Error, login request failed";
throw new RuntimeException("Failed : HTTP error code : " con.getResponseCode());
}
result = sb.toString();
// JSON Parser
JsonParser parser = new JsonParser();
JsonObject resultObj = parser.parse(result).getAsJsonObject();
con.disconnect();
if (resultObj.get("token") != null) {
result = (resultObj.get("token")).toString();
System.out.println("JSONObject Result (token): " result);
} else {
System.out.println("result = " result);
}
} catch (Exception e) {
e.printStackTrace();
}
// returns token value in string ie. fdg573gb3789gv923378gy83g3
result = result.replaceAll(""", "");
return resu<
}
Комментарии:
1. Что это за сообщение об ошибке? Не могли бы вы опубликовать это здесь?
2. @Nurzhan ошибка — это ответ от сервера: {«ErrorCode»:»21327″, «info»:»Неверный запрос»}
3. При выполнении у вас не должно быть ключа
=
inbody.add
. Он будет добавлен для вас4. @peeskillet Это сделало это!!! теперь все работает нормально, пожалуйста, добавьте это в качестве ответа, чтобы я мог принять…
Ответ №1:
При выполнении у вас не должно быть ключа =
in body.add
. Он будет добавлен для вас
MultivaluedMap<String, String> body = new MultivaluedMapImpl();
body.add("username=", email); // remove the =
body.add("password=", password); // remove the =