Как реализовать функцию Restlet, которая принимает сообщение JSON? И как я могу проверить это с помощью curl?Restlet POST с использованием JSON
Благодаря
Как реализовать функцию Restlet, которая принимает сообщение JSON? И как я могу проверить это с помощью curl?Restlet POST с использованием JSON
Благодаря
Вот хороший и полный пример Restlet, который принимает JSON через POST:
И основной руководство о том, как проверить RESTful веб-служб с cURL:
С Restlet 2, вы можете:
тест на совместимость медиа-тип объекта в @Post acceptRepresentation(Representation entity)
:
@Post
public Representation acceptRepresentation(Representation entity)
throws ResourceException {
if (entity.getMediaType().isCompatible(MediaType.APPLICATION_JSON)) {
// ...
}
// ...
}
или использовать @Post
с одним или двумя параметрами:
@Post("json") Representation acceptAndReturnJson(Representation entity) {
// ...
}
Смотрите эти ссылки: (. С Restlet 1, вам нужно будет проверить тип объекта)
Извините за баржирование, но я не могу найти простой способ преобразования JSONRepresentation в POJO. –
2-я ссылка не работает. – Chloe
пример связан с помощью Даниэль Вассалло показывает данные, опубликованные с использованием формы. Это как отправить JSON:
@Post
public void acceptJsonRepresentation(JsonRepresentation entity) {
JSONObject json = null;
try {
json = entity.getJsonObject();
// business logic and persistence
} catch (JSONException e) {
setStatus(Status.CLIENT_ERROR_BAD_REQUEST);
return;
}
}
Для тестирования с завитком:
curl -X POST <your url> -H "Content-Type: application/json" -d '{"key" : "value"}'
одиночные кавычки («») вокруг данных в локон команде важны.
Извините за баржирование, но я не могу найти простой способ преобразования JSONRepresentation в POJO. –
С момента написания ответа (через 2 года после вашего вопроса), Restlet 2.1 требует надлежащих зависимостей, необходимых для правильного потребления и ответа с помощью JSON. Точка, кроме ответа «Unsupported media type
», мало что знает о том, что происходит внутри.
Чтобы активировать тип носителя JSON, вам необходимо указать зависимость от org.restlet.ext.jackson
; если вам нужно поддерживать как XML, так и JSON, вам необходимо включить Jackson FIRST, а затем org.restlet.ext.xstream
, так как XStream также способен к представлениям JSON, но реализация довольно плохая (как описано в рестайльных документах, это рекомендуется для авторов рестлеров).
Затем вам не нужно включать тип мультимедиа в аннотацию, и вам просто нужно включить заголовок Content-Type
в свой запрос на завивание, т. Е.:
curl -X post -H "Content-Type: application/json" http://localhost:8080/login -d @login.json
login.json
содержит фактический запрос JSON.@Post
аннотированный метод принятия LoginRequest
и оказывающей LoginResponse
, оба способны XML и JSON типов носителейЯ надеюсь, что этот ответ поможет кому-то. :-)
curl -u uid:4c521655 -X POST -H "Content-Type: application/json" -d "type=Big&data="{\"name\":\"test\"}"" --dump-header headers 'http://localhost:8190/appli/add'
Приносим извинения за этот старый вопрос. Restlet поддерживает сигнатуры методов, содержащие компоненты. В таких случаях Restlet будет использовать зарегистрированный конвертер, чтобы попытаться преобразовать/заполнить полученную полезную нагрузку в экземпляр компонента. Это также верно при отправке содержимого клиенту.
Вот пример метода, который обрабатывает запрос POST
:
public class TestServerResource extends ServerResource {
@Post
public void test(TestBean bean) {
System.out.println(">> bean = " + bean.getMessage());
}
}
боб может просто иметь следующую структуру:
public class TestBean {
private String name;
private String message;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
сделать работу такого механизма, вы можете просто добавить расширение Jackson (org.restlet.ext.jackson
) в вашем пути к классу. Соответствующий конвертер будет автоматически зарегистрирован под капотом.
Завитка запрос прост и данные для отправки должен быть указаны
curl -X POST http://... -H "Content-Type: application/json" -d '{"name" : "myname","description":"my description"}'
Надеется, что это помогает вам, Тьерри
в примере, данные по-прежнему публикуемый с использованием стандартных форм-url- encode "name = value". Итак, как я могу выполнить POST форматированную строку JSON {"name": "value"}? – portoalet
Первая ссылка очень старая. Многие вещи сделаны вручную, где они могли быть сделаны автоматически. ** Будьте предупреждены ** –
Первая ссылка мертва. – zionpi