hinzufügen, arbeite ich an einem Rest-API mit Jersey. Ich muss eine @PUT
Methode hinzufügen, aber es löst eine Ausnahme aus.HTTP-Status 500 - Servlet.init() für Servlet Trikot-Servlet warf Ausnahme Wenn ich @PUT-Methode
Dies ist die Methode, die ich jetzt hinzufügen versuchen:
@Path("/login")
public class LoginController {
...
@PUT
@Path("/user")
@Consumes("application/json;charset=utf-8")
@Produces("application/json;charset=utf-8")
public String putUser(@QueryParam("user")LoginUser lu) {
return "login failed";
}
...
}
In Wirklichkeit mehr Inhalt in dem Verfahren gibt es aber den Inhalt spielt keine Rolle. Wenn diese Methode in der Klasse vorhanden ist, erhalte ich die folgende Ausnahme bei dem Versuch, auf den Server zuzugreifen:
javax.servlet.ServletException: Servlet.init() for servlet jersey-servlet threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:748)
root cause
com.sun.jersey.spi.inject.Errors$ErrorMessagesException
com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170)
com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136)
com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199)
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:795)
com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:790)
com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:509)
com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:339)
com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605)
com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:207)
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)`enter code here`
com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:748)
Es gibt auch andere @PUT
Methoden in der Klasse, die, wie sie funktionieren sollen, aber wenn ich diese neuen hinzufügen, alles hört auf zu arbeiten.
Dies ist der Inhalt meiner Datei web.xml:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>REST API</display-name>
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
</web-app>
Wenn ich die @PUT
Annotation @GET
und entfernen Sie die @Consumes
Anmerkung zu ändern, alles funktioniert. Warum kann ich keinen neuen @PUT
hinzufügen?
Was passiert, wenn Sie nur die Annotation @ Consumes entfernen? Funktioniert es? – Nathan
Wenn Sie den LoginUser im body (json) senden, müssen Sie @QueryParam ("user") entfernen –
@Nathan Nein, es sei denn, ich ändere auch PUT in GET. –