Java: проблема сопоставления URL службы отдыха в Джерси - PullRequest
2 голосов
/ 04 июня 2019

Я пытаюсь настроить службы отдыха Джерси для моего веб-приложения Java.Проблема, с которой я сталкиваюсь, заключается в том, что я могу получить требуемый ответ только по URL-адресу корневых сервисов.Любой другой URL, который я пытался установить, возвращает HTTP 404. Not Found.

Работает следующая конфигурация:

package cz.mono.wb.rest
@Path("/")
public class UserService 
{
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String respondAsReady() {
        return "Web service is ready!";
    }
}

Когда я обращаюсь к серверу URL: port / contextRoot / rest / in browse,он возвращает правильный ответ, но когда я пытаюсь установить аннотацию @Path, например, так:

package cz.mono.wb.rest
@Path("/user")
public class UserService 
{
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String respondAsReady() {
        return "Web service is ready!";
    }
}

и пытаюсь получить доступ к URL

server:port/contextRoot/rest/user/

или

server:port/contextRoot/rest/user

возвращается 404.

Конфигурация Джерси выглядит следующим образом: web.xml

<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
    com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>cz.mono.wb.rest</param-value>
</init-param>
<init-param>
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
    <param-value>true</param-value>
</init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>jersey-serlvet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

pom.xml

<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.19</version>
</dependency>

Ответы [ 3 ]

1 голос
/ 10 июня 2019

Как вы уже указали url-pattern в вашей конфигурации как:

<url-pattern>/rest/*</url-pattern>

Теперь вам не нужно иметь / перед вашим путем в ресурсе.Просто попробуйте @Path("user"), и оно должно работать сейчас

1 голос
/ 17 июня 2019

Только что посмотрел на ваш код и в исключении он сказал, что отключил JAR-RS:

 (EJBComponentProviderFactoryInitilizer.java:89) - The EJB interceptor binding API is not available. JAX-RS EJB support is disabled.

Мосто, вероятно, решение этой проблемы решит вашу проблему. Надеюсь, я помог вам решить вашу проблему.

0 голосов
/ 10 июня 2019

Путь /user является абсолютным (обратите внимание на косую черту / с префиксом перед user), что означает, что он указывает на корень имени хоста. Таким образом, он фактически указывает на <hostname>/user, а не на <hostname>/root/user. Итак, чтобы исправить это, просто измените значение аннотации @Path на "/root/user".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...