REST с сервером Tomcat JAX-RS, возвращающим «запрошенный ресурс недоступен» - PullRequest
0 голосов
/ 27 августа 2018

Я следовал короткому учебнику по созданию REST API с использованием JAX-RS.Я использую сервер Tomcat v7.0.При запуске приложения на сервере я получаю сообщение об ошибке 404 - запрошенный ресурс недоступен.Проект основан на Maven, и мой файл pom.xml содержит следующую строку

  <properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
 </properties>

В результате у меня нет файла web.xml.Так было достигнуто учебное пособие.У меня нет файла index.html / jsp.Я создал два класса RESTconfig.java и BookResources.java

...import statements 
@ApplicationPath("api")
public class RESTconfig extends Application {

}

...import statements
@Path("books")
public class BookResources {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String books() {
        return "Hello world";
    }
}

Мой pom.xml файл выглядит следующим образом

<groupId>com.dere</groupId>
  <artifactId>myrest</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
    <properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
  </properties>
  <dependencies>
  <dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
    <scope>provided</scope>
 </dependency>

После запуска приложения на сервере и перехода к http://localhost:9090 Я могу видеть домашнюю страницу Tomcat, но если попытаться получить данные http://localhost:9090/myrest/api/books Я получаю ошибку 404, т.е. запрошенный ресурс недоступен, как я упоминал выше.Большинство примеров или использования, которые я видел в Интернете, включают использование web.xml и предоставление корневого каталога приложения и использование сервлета.Это мой первый опыт построения REST API.Возможно, я неправильно все понял или пропустил какой-то шаг.Я с нетерпением жду вашей помощи.Я использую Eclipse Photon для Java EE

1 Ответ

0 голосов
/ 27 августа 2018

Посмотрите на это

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>

Это всего лишь набор интерфейсов для спецификации EE.Там нет реализации.Серверы Java EE будут иметь реализацию.Tomcat не является EE-сервером.Единственная часть спецификации EE, для которой он определенно будет иметь реализацию, - это сервлеты и JSP (веб-профиль).Если вам нужен сервер EE, извлеките Glassfish или Wildfly.

Вы пытаетесь работать со спецификацией JAX-RS, где Tomcat наверняка по умолчанию не имеет реализации для.Так что вам нужно добавить эту реализацию.ИМО, с которой проще всего начать, - это Джерси.Вы можете просто добавить эту зависимость

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.25.1</version>
</dependency>

, и она заработает.Держите Руководство пользователя на Джерси под рукой.Он будет использоваться.

...