2010-01-09 2 views

ответ

2

Вот хороший и полный пример Restlet, который принимает JSON через POST:

И основной руководство о том, как проверить RESTful веб-служб с cURL:

+2

в примере, данные по-прежнему публикуемый с использованием стандартных форм-url- encode "name = value". Итак, как я могу выполнить POST форматированную строку JSON {"name": "value"}? – portoalet

+0

Первая ссылка очень старая. Многие вещи сделаны вручную, где они могли быть сделаны автоматически. ** Будьте предупреждены ** –

+0

Первая ссылка мертва. – zionpi

10

С 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, вам нужно будет проверить тип объекта)

+0

Извините за баржирование, но я не могу найти простой способ преобразования JSONRepresentation в POJO. –

+0

2-я ссылка не работает. – Chloe

6

пример связан с помощью Даниэль Вассалло показывает данные, опубликованные с использованием формы. Это как отправить 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"}' 

одиночные кавычки («») вокруг данных в локон команде важны.

+1

Извините за баржирование, но я не могу найти простой способ преобразования JSONRepresentation в POJO. –

8

С момента написания ответа (через 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 типов носителей

Я надеюсь, что этот ответ поможет кому-то. :-)

0
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' 
3

Приносим извинения за этот старый вопрос. 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"}' 

Надеется, что это помогает вам, Тьерри

Смежные вопросы