我正在使用 Jersy 开发 REST web 服务,这是我的简单代码:
@GET
@Path("/retrieveCustomerInformation/{jsonString}")
@Produces(MediaType.APPLICATION_JSON)
public String retrieveCustomerInformation(@PathParam("jsonString")JSONObject jsonObject)
throws Exception {
//Other codes here
}
但是当我从浏览器 ping 其余服务 url 时,出现以下异常:
javax.servlet.ServletException: Servlet.init() for servlet jersey-serlvet 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)
根本原因是:
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)
有人可以指导我,是什么导致了这个错误?我发现很难理解此错误消息,因为它没有提供任何有用的调试信息。
这是我的 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>com.test/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>
我正在使用 Jersey 1.8、JDK 1.7 并且 App 在 Tomcat 7.0 上运行。如果需要,我可以提供更多信息。
检查冲突的@Path 注释。 这将导致相同的错误。这是通信路径问题的奇怪错误,但您可以通过重命名匹配路径轻松测试它。
以下代码中的兑现路径示例
部分课程
@Path("/storage")
public class BookingRestService {
@GET
@Path("/bookings")
@Produces(value = MediaType.APPLICATION_XML)
和另一个班级
@Path("/storage")
public class StorageRestService {
通过重命名任何
@Path("/storage")
问题得到解决。
您的问题似乎是重复的,可能已得到适当解决。前段时间我也有同样的问题。 单击此处查看为我解决问题的已接受答案
如果您不愿意点击链接,首先,尝试将
jersey-multipart.jar
和 mimepull.jar
添加到您的项目库中...如果您的项目是 Maven 项目,请添加以下依赖项到你的pom.xml
。 mimepull
依赖项应随附。
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.8</version>
</dependency>
请记住确保您使用的
jersey-multipart
版本与您在项目中使用的jersey
版本相同。
以防万一上述解决方案无法解决您的问题,您可能还想在此处查看更多有用的提示。干杯!
从引用中添加依赖
在你的 web.xml 中
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.rest.portal</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.scanning.recursive</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>com.rest.portal.HelloWord</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>
在 Jersey 1.x 中仅使用
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
在2.x系列中使用
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
并添加必要的 jersy jar 文件
另一个用例,导致相同的异常,破坏了我的代码。 如果你要这样写资源:
public String getPOST(@QueryParam("type") Character type){}
以下数据类型,
Character
,会引发异常