Рестлет: получение ключей параметров и значений запроса - PullRequest
1 голос
/ 15 февраля 2012

У меня есть служба Restlet, которая выглядит следующим образом:

@POST
@Produces("application/json")
public String processImmediately(String JSON) {

    //...
}

Намерение - передать строку JSON через POST.Параметр, который я использовал (String JSON), действительно содержит параметры целого URL, например,

JSON=%7B%22MessageType%22%3A%22egeg%22%7D&SomeValue=XY

Интересно, как я могу это проанализировать.На сайте Restlet я обнаружил следующее:

http://wiki.restlet.org/docs_2.0/13-restlet/27-restlet/330-restlet/58-restlet.html

Form form = request.getResourceRef().getQueryAsForm();
for (Parameter parameter : form) {
System.out.print("parameter " + parameter.getName());
System.out.println("/" + parameter.getValue());

Как я могу использовать это в своем методе обслуживания?Я даже не могу определить правильные типы (например, запрос, форма).Мне нужен параметр метода больше или это замена?

Спасибо

1 Ответ

2 голосов
/ 15 февраля 2012

Вашей конечной точке передается вся строка запроса, потому что вы не указали, какую ее часть вы хотите использовать. Чтобы привязать только параметр запроса JSON к вашему методу, попробуйте что-то вроде этого:

@POST
@Path("/")
@Consumes("application/x-www-url-formencoded")
@Produces("application/json")
public String processImmediately(@FormParam("JSON") String json) {
    System.out.printf("Incoming JSON, decoded: %s\n", json);
    // ....
}

* РЕДАКТИРОВАТЬ *

Вы выбираете привязку аргумента метода в зависимости от ожидаемого типа контента. Так, например, если ваш Content-Type равен application/x-www-form-urlencoded (данные формы), вы должны связать @FormParam. В качестве альтернативы для Content-Type application/json вы можете просто использовать тело запроса в виде строки.

@POST
@Path("/")
@Consumes("application/json")
@Produces("application/json")
public String processImmediately(String json) {
    System.out.printf("Incoming JSON, decoded: %s\n", json);
    // ....
}

Если вы обнаружите, что у вас есть данные в кодировке URL при использовании второго метода, то ваш клиент неправильно передает свои данные на сервер.

...