我是 REST/Jersey 新手,我有一个简单的 RESTful Java Web 服务,使用 Spring 版本的 Jersey 实现......
@Service
@Path("/getAccountBalance")
public class GetAccountBalanceService {
@Autowired
private ILicenseService licenseService;
@GET
@Path("/{param}")
public Response provideService(@PathParam("param") String licenseUUID) {
License license = this.licenseService.getByUUID(licenseUUID);
String output = "Balance on the account : " + license.getBalanceValue();
return Response.status(200).entity(output).build();
}
并配置了带有 Web .xml Spring 支持的球衣 servlet。
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>
com.sun.jersey.spi.spring.container.servlet.SpringServlet
</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.freedomoss.crowdcontrol.api</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<servlet-mapping>
<servlet-name>jersey-servlet</servlet-name>
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
但是当我尝试调用该服务时,我收到以下异常....
Dec 19, 2014 11:34:04 AM com.sun.jersey.spi.spring.container.SpringComponentProviderFactory registerSpringBeans
INFO: Registering Spring bean, jsonProvider, of type com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider as a provider class
SEVERE: Exception occurred when intialization
java.lang.RuntimeException: The scope of the component class com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider must be a singleton
at com.sun.jersey.core.spi.component.ioc.IoCProviderFactory.wrap(IoCProviderFactory.java:102)
所以我在我的应用程序的另一部分使用 JacksonJaxbJsonProvider,那么为什么 Jersey spring 会碰到这个类然后抱怨它呢?
谢谢。
我能够通过搜索应用程序上下文XML(这对我的应用程序来说非常重要(来消除此错误,以查找对JacksonJaxbJsonProvider的所有引用。我看到 2 个单独的 bean 被定义为使用此类。我删除了其中一个并将单例属性添加到我保留的那个中......
<bean id="jaxbObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>
<bean id="jsonProvider" class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider" scope="singleton">
<property name="mapper" ref="jaxbObjectMapper" />
</bean>
希望这对某人有所帮助。