Как использовать аннотацию @Context
В части 3 раздела Что такое javax.ws.rs.core.context? Вы узнали, как использовать аннотацию @Context с экземплярами запросов и конфигурации, поставщиками и приложениями .
В этой статье вы узнаете об использовании аннотации @Context для внедрения классов HttpServletResponse и HttpServletRequest .
Получить доступ к свойствам HttpServletRequest
JAX-RS API работает поверх сервлетов, поэтому экземпляры объектов сервлетов доступны для ресурса JAX-RS. Аннотация @Context используется для внедрения экземпляра HttpServletRequest для текущего запроса. Его методы дают доступ к подробной информации о запросе.
Давайте рассмотрим простой пример, который возвращает удаленный адрес запроса.
01
02
03
04
05
06
07
08
09
10
11
|
@Path ( "/remote-address" ) public class HttpServletRequestResource { @GET @Produces (MediaType.APPLICATION_JSON) public Response getRemoteAddress( final @Context HttpServletRequest httpServletRequest){ return Response.ok(httpServletRequest.getRemoteAddr()).build(); } } |
В этом примере кода объект запроса Servlet внедряется в параметр метода httpServletRequest с помощью аннотации @Context . Метод getRemoteAddr () вызывается и возвращает IP-адрес сервера, который сделал запрос.
Если вы запускаете этот пример на локальном компьютере, ответ на вызов URL http: // localhost: 8080 / rest-server / remote-address будет 127.0.0.1.
Получить доступ к свойствам HttpServletResponse
Так же, как вы можете получить экземпляр объекта HttpServletRequest, вы также можете получить экземпляр HttpServletResponse и вызвать его методы и установить значения в экземпляре ответа.
Давайте посмотрим на пример, который получает ServletOutputStream и сбрасывает сообщение в ответ.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
@Path ( "/output" ) public class HttpServletResponseResource { @GET @Produces (MediaType.APPLICATION_JSON) public Response get( final @Context HttpServletResponse httpServletResponse) throws IOException { ServletOutputStream out = httpServletResponse.getOutputStream(); out.print( "Hello" ); out.flush(); return Response.ok().build(); } } |
В этом примере экземпляр объекта HttpServletResponse внедряется в параметр метода httpServletResponse, а затем получается экземпляр объекта ServletOutputStream. Затем я использую этот объект для записи сообщения в выходной поток, а затем сбрасываю его в ответ.
Если вы посетите URL http: // localhost: 8080 / rest-server / output, вы увидите сообщение «Hello», напечатанное на экране.
Репозиторий кода
Исходный код этой и всех моих статей находится в репозитории readlearncode_articles Github.
Что дальше?
Это все для части 4, в части 5 Что такое javax.ws.rs.core.context? вы узнаете, как использовать аннотацию @Context для внедрения экземпляров javax.servlet. ServletConfig и javax.servlet. ServletContext .
Видеокурс по Java EE
Если вы только начинаете и плохо знакомы с Java EE, может быть довольно сложно разобраться во всех API. Именно поэтому я создал видео-курс Learning Java Enterprise Edition . На этом двухчасовом курсе вы познакомитесь со всеми наиболее важными API Java EE. С большим количеством примеров кода и демонстраций того, как разрабатывать с помощью Java EE, вы скоро станете разработчиком Java EE.
После вводного курса вы захотите углубиться в каждый API. Для этого также есть курсы. Вы можете усовершенствовать свои знания Java EE, узнав, как создавать конечные точки RESTful с помощью API JAX-RS , затем вы можете научиться разрабатывать приложение для чата с API WebSocket, а затем освоить JSON с помощью курса API JSON-Processing . Еще много курсов по дорожной карте, так почему бы не начать сейчас и дать толчок своей карьере Java EE.
Дальнейшее чтение
Недавно я опубликовал мини-серию блогов, посвященных JAX-RS . Они опубликованы на readlearncode.com и обсуждают, как управлять ошибками проверки bean-компонентов , работать с Потребителями и Производителями , а также как создавать Ресурсные объекты JAX-RS .
Ссылка: | Что такое javax.ws.rs.core.context? [Часть 4] от нашего партнера JCG Алекса Тидома из блога Read Learn Code . |