2015-04-13 3 views
1

У меня есть простой службы Restlet, который возвращает представление JSON, как показано ниже:Запрос на REST службы JSON с POSTMAN/Rest Client

@Override 
    @Post("json") 
public Representation helloWorld() { 
    Representation representation = new JacksonRepresentation<Hello>(new Hello("Hello World")); 
    representation.setMediaType(MediaType.APPLICATION_JSON); 
    representation. 
    return representation; 
} 

Когда я запрашиваю это с помощью CURL я получаю ответ, как и ожидалось:

{"greeting":"Hello World"} 

Однако я не получаю ответа, когда я пользуюсь браузером или POSTMAN или любым другим веб-клиентом REST. Я получаю ответ «Не могу получить никакого ответа» от POSTMAN.

Предварительный просмотр запроса Почтальон:

POST /testingrestlet/hello HTTP/1.1 
Host: 127.0.0.1:6000 
Content-Type: application/json 
Cache-Control: no-cache 
Postman-Token: 5141cd87-505c-e813-0045-3b7f4aa54144 

я бы по крайней мере ожидать клиента REST, такие как POSTMAN работать, или я что-то отсутствует?

Любая помощь приветствуется.

С уважением

ответ

3

С помощью из комментариев Тьерри проблема была прослежена до запросов Google Chrome на блокировку порта 6000, поскольку он считает их небезопасными. Ошибка была видна только в режиме Chrome Debug, где сообщалось об ошибке ERR_UNSAFE_PORT. Изменение на более высокий порт разрешило проблему! Деталь этой ошибки можно найти здесь: https://superuser.com/questions/188006/how-to-fix-err-unsafe-port-error-on-chrome-when-browsing-to-unsafe-ports

3

Я думаю, что вы должны использовать заголовок Accept для переговоров контента (conneg). Ваш запрос должен быть:

POST /testingrestlet/hello HTTP/1.1 
Host: 127.0.0.1:6000 
Content-Type: application/json 
Accept: application/json 
Cache-Control: no-cache 
Postman-Token: 5141cd87-505c-e813-0045-3b7f4aa54144 

В самом деле, так как вы указать расширение «JSON» в аннотации, Restlet ожидает, что этот заголовок был послан с одним из возможных типов носителей для содержания JSON. Эта подсказка используется для выбора способа обработки ... Вы не должны иметь эту проблему, если удалить расширение, как описано ниже:

@Post 
public Representation helloWorld() { 
    Representation representation 
     = new JacksonRepresentation<Hello>(new Hello("Hello World")); 
    representation.setMediaType(MediaType.APPLICATION_JSON); 
    (...) 
    return representation; 
} 

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

+1

Привет Тьерри, попробовал дополнительный заголовок Accept, а также просто удалил подсказку json. Все еще не удача :(Интересно, POSTMAN предоставляет версию запроса CURL, которая работает из командной строки (curl -X POST -H) Content-Type: application/json "-H" Accept: application/json "-H" Cache-Control: no-cache "-H" Postman-Token: 58bb4b2e-fa2d-e204-7a8b-e7e83766f1a1 "-d '' http://127.0.0.1:6000/testingrestlet/hello) – user3521637

+0

Здравствуйте, есть ли ошибка в возвращаемой полезной нагрузке или сообщении, которое вы можете отправить мне? Спасибо! –

+1

Я только что сделал настоящий тест с кодом, который вы предоставили, и не добавил никакого конкретного заголовка, и он работает для меня. Я использую chrome 41.0.2272.118 (linux) и postman 0.8 .4.14. –

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