2017-08-08 354 views
0

我正在使用Jersey的rest API。我需要添加一个@PUT方法,但它会引发异常。HTTP状态500 - servlet jersey-servlet的Servlet.init()抛出异常当我添加@PUT方法

这是我想现在就加入方法:

@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"; 
    } 
... 
} 

在现实中存在的方法的详细内容,但内容并不重要。当此方法的类存在,我得到试图访问服务器时,以下异常:

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) 

还有其他@PUT方法的类,因为他们应该,但是当我加入这个新的,一切工作停止工作。

这是我的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> 

如果我改变@PUT注释@GET并删除@Consumes注释,一切正常。为什么我不能添加新的@PUT

+0

如果您只是删除'@ Consumes'注释会怎么样?它工作吗? – Nathan

+1

如果你发送的是正文(json)中的LoginUser,你必须删除@QueryParam(“user”) –

+0

@Nathan否,除非我也将PUT更改为GET。 –

回答

0

请注意,您发送LoginUser作为json请求正文,因此您需要删除@QueryParam("user")

相关问题