Я пытаюсь написать базовый веб-сервис, который использует аннотацию JAX-RS @QueryParam. Мой клиент Java отправляет запрос POST с использованием HttpURLConnection. Вызов выполняется в веб-службе, но параметры не отправляются правильно (они остаются пустыми). Я знаю, что в StackOverflow много вопросов, связанных с этим, но я не мог найти убедительного решения. Будет здорово, если кто-то укажет на ошибку в приведенном ниже коде. (Я упростил код для публикации здесь).Как отправить параметры запроса на запрос POST с Java-клиента и получить с помощью @QueryParam
Вот код веб-сервис:
@POST
@Path("/notify")
@Consumes("*/*")
public Response notifyUser(@QueryParam("notification") String notification, @QueryParam("applicationName") String applicationName) {
System.out.println("Notification: " + notification);
System.out.println("Application: " + applicationName);
return Response.status(200).entity(notification + " from " + applicationName).build();
}
И это Java-клиент:
public static void main(String args[]) {
URL url;
HttpURLConnection conn = null;
try {
url = new URL("http://localhost:8080/...");
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json");
conn.setRequestProperty("charset", "UTF-8");
OutputStream os = conn.getOutputStream();
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new NameValuePair("notification", "Notification string"));
params.add(new NameValuePair("applicationName", "MyApp"));
os.write(getQuery(params).getBytes("UTF-8"));
os.flush();
os.close();
return conn.getResponseCode();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return -1;
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
private String getQuery(List<NameValuePair> params) throws UnsupportedEncodingException {
StringBuilder result = new StringBuilder();
boolean first = true;
for (NameValuePair pair : params) {
if (first)
first = false;
else
result.append("&");
result.append(URLEncoder.encode(pair.getName(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(pair.getValue(), "UTF-8"));
}
return result.toString();
}
Мой веб-сервис вызывался, но значения параметров, полученных в нуль. Пожалуйста помоги.
Этот код предназначен только для Android JDK или для Windows JDK? – user3002512