简体   繁体   English

使用Spring配置Rest(Jersey)

[英]Configuring Rest (Jersey) with Spring

I am trying to use Jersey 1.8 with Spring 4 . 我正在尝试在Spring 4中使用Jersey 1.8。 But I am not able to inject dependency in Rest Class using Spring. 但是我无法使用Spring在Rest Class中注入依赖项。

Each time I try and invoke the autowired dependency I get NULL. 每次尝试调用自动装配的依赖项时,我都会得到NULL。 Can anyone suggest why my dependency isn't being injected? 谁能说出为什么我的依赖没有被注入?

Web.xml Web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>



    <servlet>
        <servlet-name>Rest</servlet-name>
        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-servlet.xml</param-value>
        </init-param>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>org.portal.services</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Rest</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>  

spring-servlet.xml spring-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">


    <context:component-scan base-package="org.portal.services"></context:component-scan>
    <context:annotation-config />

    <bean
        class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <property name="location">
            <value>WEB-INF/dataSource.properties</value>
        </property>
    </bean>
    <import resource="hibernate.cfg.xml" />
    <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

    <bean id="addCountryService" class="org.portal.services.AddCountryService">
        <property name="addCountryProcessor" ref="addCountryProcessor"></property>
    </bean>

    <bean id="addCountryProcessor" class="org.portal.processors.AddCountryProcessor">
        <property name="hibernateTemplate" ref="hibernateTemplate" />
    </bean>


</beans>

Rest Coltroller 休息统筹

package org.portal.services;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.portal.dto.Country;
import org.portal.processors.AddCountryProcessor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

@Component
@Path("/Country")
public class AddCountryService {

    @Autowired
    private AddCountryProcessor addCountryProcessor;

    @POST
    @Path("/addCountry")
    @Produces(MediaType.APPLICATION_XML)
    @Consumes(MediaType.APPLICATION_XML)
    public String addCountry(String newCountry) {

        XStream xStream = new XStream(new DomDriver());
        xStream.alias("country", Country.class);
        xStream.alias("id", String.class);
        xStream.alias("name", String.class);
        xStream.alias("region", Integer.class);

        Country country  = (Country)xStream.fromXML(newCountry);
        System.out.println("processor is "+addCountryProcessor);

        if(country != null){
            addCountryProcessor.addCountry(country);
        }
        return newCountry;
    }

    public void setAddCountryProcessor(AddCountryProcessor addCountryProcessor) {
        this.addCountryProcessor = addCountryProcessor;
    }

    public AddCountryProcessor getAddCountryProcessor() {
        return addCountryProcessor;
    }

}

After posting request to " http://localhost:7070/HumanResourcePortal/rest/Country/addCountry ", Flow is coming to "addCountry()" method but then it is printing addCountryProcessor as null 在将请求发布到“ http:// localhost:7070 / HumanResourcePortal / rest / Country / addCountry ”后,流程将进入“ addCountry()”方法,但随后将addCountryProcessor打印为null

There are two options available here: 这里有两个选项:

  • Replace @Autowired with @com.sun.jersey.spi.inject.Inject . @Autowired替换为@com.sun.jersey.spi.inject.Inject This @Inject annotation will inject from the configured DI framework. @Inject批注将从配置的DI框架中注入。

  • Use com.sun.jersey.spi.spring.container.servlet.SpringServlet for deploying the your resources with spring integration. 使用com.sun.jersey.spi.spring.container.servlet.SpringServlet通过spring集成部署资源。 For spring integration you need to include the following dependency: 对于spring集成,您需要包括以下依赖项:

     <dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-spring</artifactId> <version>1.8</version> <exclusions> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </exclusion> <exclusion> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> </exclusion> </exclusions> </dependency> 

Spring dependencies are excluded here to use your declared one rather than the one used by jersey-spring . 这里不包括Spring依赖项,以使用声明的变量而不是jersey-spring

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM