问题
在RESTEasy中使用Jackson作为JSON提供程序。
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.2.1.GA</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>2.2.1.GA</version>
</dependency>
启用RESTEasy自动扫描。
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
启动时,它遇到以下错误,无法启动任何RESTEasy服务。
SEVERE: Exception sending context initialized event to listener instance of class
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
java.lang.RuntimeException: Unable to instantiate MessageBodyReader
at org.jboss.resteasy.spi.ResteasyDeployment.registerProvider(ResteasyDeployment.java:505)
at org.jboss.resteasy.spi.ResteasyDeployment.registration(ResteasyDeployment.java:305)
at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:225)
//...
Caused by: java.lang.RuntimeException:
Illegal to inject a message body into a singleton into public
org.codehaus.jackson.jaxrs.JacksonJsonProvider(
org.codehaus.jackson.map.ObjectMapper,org.codehaus.jackson.jaxrs.Annotations[])
... 20 more
解
如果启用“ 自动扫描 ”模式,则将RESTEasy与Jackson集成时会出现问题。 希望它会在以后发布时修复。
要解决此问题,请禁用自动扫描功能,然后在web.xml
手动注册RESTEasy服务。
<!-- disabled auto scanning
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
-->
<context-param>
<param-name>resteasy.resources</param-name>
<param-value>com.mkyong.JacksonRestServiceHere</param-value>
</context-param>