1. введение
JAX-RS (Java API для веб-служб RESTful) – это набор Java API, который обеспечивает поддержку при создании REST API . И фреймворк хорошо использует аннотации для упрощения разработки и развертывания этих API.
В этом уроке мы будем использовать RESTEasy, предоставляемую JBoss портативную реализацию спецификации JAX-RS, для создания простых веб-служб RESTful.
2. Настройка проекта
Мы рассмотрим два возможных сценария:
- Автономная настройка – предназначена для работы на каждом сервере приложений
- JBoss КАК настройка – рассматривать только для развертывания в JBoss КАК
2.1. Автономная настройка
Давайте начнем с использования JBoss WildFly 10 с автономной настройкой.
JBoss WildFly 10 поставляется с версией RESTEasy 3.0.11, но, как вы увидите, мы настроим pom.xml с новой версией 3.0.14.
И благодаря resteasy-servlet-initializer , RESTEasy обеспечивает интеграцию с автономными Servlet 3.0 контейнерами через ServletContainerInitializer интерфейс интеграции.
Давайте взглянем на pom.xml :
3.0.14.Final org.jboss.resteasy resteasy-servlet-initializer ${resteasy.version} org.jboss.resteasy resteasy-client ${resteasy.version}
Давайте взглянем на || pom.xml ||:
В JBoss все, что развертывается как WAR, JAR или EAR, является модулем. Эти модули называются динамическими модулями .
Помимо них, есть также некоторые статические модули в $JBOSS_HOME/modules . Поскольку у JBoss есть RESTEasy статические модули – для автономного развертывания, jboss-deployment-structure.xml является обязательным для того, чтобы исключить некоторые из них.
Таким образом, будут загружены все классы и JAR файлы, содержащиеся в нашем WAR :
2.2. JBoss как настройка
Если вы собираетесь запустить REST Easy с JBoss версии 6 или выше, вы можете выбрать использование библиотек, уже включенных в сервер приложений, что упростит pom:
org.jboss.resteasy resteasy-jaxrs ${resteasy.version}
Обратите внимание, что jboss-deployment-structure.xml больше не требуется.
3. Код На стороне Сервера
3.1. Сервлет версии 3 web.xml
Давайте теперь быстро взглянем на web.xml о нашем простом проекте здесь:
RestEasy Example resteasy.servlet.mapping.prefix /rest
resteasy.servlet.mapping.prefix необходим только в том случае, если вы хотите добавить относительный путь к приложению API.
На этом этапе очень важно заметить, что мы не объявили ни одного сервлета в web.xml потому что resteasy инициализатор сервлета был добавлен в качестве зависимости в pom.xml . Причина этого – RESTEasy предоставляет org.jboss.resteasy.plugins.servlet.ResteasyServletInitializer класс, реализующий javax.server.ServletContainerInitializer .
ServletContainerInitializer – это инициализатор, и он выполняется до того, как любой контекст сервлета будет готов-вы можете использовать этот инициализатор для определения сервлетов, фильтров или прослушивателей для вашего приложения.
3.2. Класс Приложения
Ядро javax.ws.rs.Класс Application – это стандартный класс JAX-RS, который можно реализовать для предоставления информации о развертывании:
@ApplicationPath("/rest") public class RestEasyServices extends Application { private Set
Как вы можете видеть – это просто класс, в котором перечислены все корневые ресурсы и поставщики JAX-RS, и он аннотирован аннотацией @ApplicationPath .
Если вы вернете любой пустой набор для классов и синглетов, ВОЙНА будет проверена на наличие классов ресурсов и поставщиков аннотаций JAX-RS.
3.3. Класс реализации Услуг
Наконец, давайте посмотрим на фактическое определение API здесь:
@Path("/movies") public class MovieCrudService { private Mapinventory = new HashMap (); @GET @Path("/getinfo") @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Movie movieByImdbId(@QueryParam("imdbId") String imdbId) { if (inventory.containsKey(imdbId)) { return inventory.get(imdbId); } else { return null; } } @POST @Path("/addmovie") @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML }) public Response addMovie(Movie movie) { if (null != inventory.get(movie.getImdbId())) { return Response .status(Response.Status.NOT_MODIFIED) .entity("Movie is Already in the database.").build(); } inventory.put(movie.getImdbId(), movie); return Response.status(Response.Status.CREATED).build(); } }
4. Выводы
В этом кратком руководстве мы представили REST Easy и создали с его помощью супер простой API.
Пример, используемый в этой статье, доступен в качестве примера проекта в GitHub .