Когда я делаю запрос, я получаю ответ в XML, но то, что мне нужно, это JSON. В документе указано, что для получения JSON в ответ: Используйте HTTP-заголовок Accept: application/json
.
Где я могу найти HTTP-заголовок, в который нужно поместить Accept: application/json
?
Я предполагаю, что он не должен быть внутри URL-запроса, который выглядит следующим образом:
http://localhost:8080/otp/routers/default/plan?fromPlace=52.5895,13.2836&toPlace=52.5461,13.3588&date=2017/04/04&time=12:00:00
Вы угадали правильно, HTTP-заголовки не являются частью URL.
И когда вы набираете URL в браузере, запрос будет выдан со стандартными заголовками. В любом случае REST Apis не предназначены для использования путем ввода конечной точки в адресной строке браузера.
Наиболее распространенный сценарий - это когда ваш сервер использует REST Api стороннего производителя.
Для этого ваш серверный код формирует соответствующий GET (/PUT/POST/DELETE) запрос, указывающий на заданную конечную точку (URL), устанавливая (при необходимости, как в вашем случае) некоторые заголовки и, наконец, (возможно) отправляя некоторые данные (как это обычно происходит, например, в POST запросе).
Код для формирования запроса, его отправки и, наконец, получения ответа зависит от языка вашей серверной части.
Если вы хотите тестировать REST Api, вы можете использовать инструмент curl
из командной строки.
curl
делает запрос и выводит ответ в stdout (если нет других указаний).
В вашем случае тестовый запрос будет выглядеть следующим образом:
$curl -H "Accept: application/json" 'http://localhost:8080/otp/routers/default/plan?fromPlace=52.5895,13.2836&toPlace=52.5461,13.3588&date=2017/04/04&time=12:00:00'
Директива H
или --header
устанавливает заголовок и его значение.
Вот удобный сайт для проверки ваших заголовков. Вы можете увидеть заголовки вашего браузера, а также использовать cURL для отражения обратно любых заголовков, которые вы отправляете.
Например, вы можете проверить согласование содержимого следующим образом.
Этот заголовок Accept
предпочитает простой текст, поэтому возвращается в таком формате:-
$ curl -H "Accept: application/json;q=0.9,text/plain" http://gethttp.info/Accept
application/json;q=0.9,text/plain
В то время как этот предпочитает JSON и поэтому возвращает в этом формате:- {{456435}}.
$ curl -H "Accept: application/json,text/*;q=0.99" http://gethttp.info/Accept
{
"Accept": "application/json,text/*;q=0.99"
}
Curl может быть лучшим вариантом для представления json, но в этом случае будет трудно понять структуру json, потому что он находится в командной строке. Если вы хотите получить свой json в браузере, просто удалите все XML-аннотации, например, -
@XmlRootElement(name="person")
@XmlAccessorType(XmlAccessType.NONE)
@XmlAttribute
@XmlElement
из класса модели, а затем запустите тот же url, который вы использовали для xml-представления.
Убедитесь, что у вас есть зависимость jacson-databind в вашем pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.1</version>
</dependency>