Ответ 1
-d x=1&y=2
(обратите внимание, что =
, not :
) - данные формы (application/x-www-form-urlencoded
) отправил ему тело запроса, в котором ваш метод ресурса должен больше походить на
@POST
@Path("/sumPost")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String sumPost(@FormParam("x") int x,
@FormParam("y") int y) {
}
и следующий запрос будет работать
curl -XPOST "http://localhost:8080/CurlServer/curl/curltutorial/sumPost" -d 'x=5&y=3'
Примечание: В Windows требуется двойные кавычки ("x=5&y=3"
)
Вы даже можете отделить пары значений ключа
curl -XPOST "http://localhost:8080/..." -d 'x=5' -d 'y=3'
По умолчанию Content-Type
- application/x-www-form-urlencoded
, поэтому вам не нужно его устанавливать.
@QueryParam
должны быть частью строки запроса (часть URL), а не частью данных тела. Таким образом, ваш запрос должен быть больше похож на
curl "http://localhost:8080/CurlServer/curl/curltutorial/sumPost?x=1&y=2"
При этом, поскольку вы не отправляете какие-либо данные в теле, скорее всего, вы должны просто сделать метод ресурса методом GET
.
@GET
@Path("/sumPost")
@Produces(MediaType.TEXT_PLAIN)
public String sumPost(@QueryParam("x") int x,
@QueryParam("y") int y) {
}
Если вы хотите отправить JSON, то лучше всего убедиться, что у вас есть поставщик JSON [ 1] который обрабатывает десериализацию в POJO. Тогда вы можете иметь что-то вроде
public class Operands {
private int x;
private int y;
// getX setX getY setY
}
...
@POST
@Path("/sumPost")
@Produces(MediaType.TEXT_PLAIN)
@Consumes(MediaType.APPLICATION_JSON)
public String sumPost(Operands ops) {
}
[ 1] - Важно то, что у вас есть провайдер JSON. Если у вас его нет, вы получите исключение с сообщением типа "No MessageBodyReader, найденным для приложения mediatype application/json и операндами типа". Мне нужно знать, какую версию Джерси и если вы используете Maven или нет, чтобы определить, как вы должны добавить поддержку JSON. Но для общей информации вы можете видеть