Przyjrzałem się wszystkim odpowiedziom na ten temat, albo mam do czynienia z zupełnie innym problemem, albo brakuje mi czegoś wielkiego.
Klasa usługi:
package org.test;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
//http://localhost:8080/JunkWeb/rest/TestRestService/callService
@Path("/TestRestService")
public class TestRestService {
@GET
@Path("/callService")
@Produces(MediaType.TEXT_PLAIN)
public String callService(){return "from Rest Service";}
}//class closing
web.xml
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>JunkWeb</display-name>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.test</param-value>
</init-param>
<!-- <init-param>
<param-name>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>
</web-app>
Adres URL:
http://localhost:8080/JunkWeb/rest/TestRestService/callService
Powinien działać, ale nie działa. Każda pomoc będzie naprawdę doceniona.
Używam oprogramowania Jersey 2.17 i Tomcat 8.0.20
Odpowiedzi:
3 dla odpowiedzi № 1"Używam Jersey 2.17"
To nie istnieje w 2.17
com.sun.jersey.spi.container.servlet.ServletContainer
Jestem zaskoczony, że nie otrzymujesz wyjątku od klasy. Co oznacza, że prawdopodobnie mieszacie wersje. A może otrzymujesz wyjątek i nie mówisz nam, w każdym razie, poprawne ServletContainer
powinno być
org.glassfish.jersey.servlet.ServletContainer
Następnie powinieneś pozbyć się wszystkiego (słoika), którego pakiety zaczynają się od tego, co powinieneś zrobić com.sun
. Są to słoiki Jersey 1. W drugiej wersji Jersey zmieniono nazewnictwo paczki na org.glassfish.xxx
Jeśli chcesz ułatwić życie, skorzystaj z Mavena i po prostu dodaj tylko jedną zależność do całego projektu, a ona przyciągnie resztę.
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.17</version>
</dependency>
Poza tym to samo nie istnieje w Jersey dwa
jersey.api.json.POJOMappingFeature
W Jersey 2 po prostu dodaj deprawację Mavena, a życie będzie dobre.
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.17</version>
</dependency>
Jeśli nie korzystasz z Maven, pobierz pakiet RI tutaj. Otwórz wszystkie foldery i dodaj każdy słoik do projektu. To jest dla podstawowego wsparcia.
Aby uzyskać wsparcie dla JSON, pobierz to, jak również wszystkie te. Możesz wyszukiwać w tej samej witrynie dla nich. robienie tego powinno działać bez dodatkowej konfiguracji. Możesz też pobrać tylko te z drugiego linku, a następnie dodać pakiet w pliku web.xml, jak widać w linku.
Ale żeby to działało, ponieważ twój kod nie wytwarza ani nie zużywa JSON-a, możesz po prostu najpierw uruchomić jądro, a kiedy zacznie działać poprawnie, możesz pracować nad obsługą JSON.