【问题标题】:rest with jersey struts2 spring3 not working休息与球衣 struts2 spring3 不工作
【发布时间】:2013-09-25 06:11:43
【问题描述】:

我正在尝试使用 jersey 为 struts2 spring3 web 应用程序公开 web 服务

我的 web.xml

    <servlet>
        <servlet-name>Jersey REST Service</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.vxl.appanalytix.service.impl</param-value>
        </init-param>
       <init-param>
            <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

struts.xml 我添加了 excludePattern

<constant name="struts.action.excludePattern" value="/rest/.*" />

服务类

@Path("/requirement")
@Service("dimRequirementManager")
public class DimRequirementManagerImpl extends GenericManagerImpl<DimRequirement, Long> implements DimRequirementManager {
    @Autowired
    DimRequirementDao dimRequirementDao;
    @GET
    @Path("count")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public DimRequirement getDimRequirement(){
    DimRequirement dimRequirement = new DimRequirement();
    dimRequirement.setClientKey(123L);
    dimRequirement.setPriority("HIGH");

    return dimRequirement;
}}

依赖

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

我在 restclient http://localhost:8080/app-web/rest/requirement/count 它的返回中传递下面的 url

Status Code: 404 Not Found
Content-Language: en
Content-Type: text/html;charset=utf-8
Date: Wed, 25 Sep 2013 05:47:27 GMT
Server: Apache-Coyote/1.1
Transfer-Encoding: chunked

当调试控制不去 getDimRequirement()

【问题讨论】:

  • 我不确定,但也许struts.xml 是问题所在。我看到您有 &lt;constant name="struts.action.excludePattern" value="/rest/.*" /&gt; 并且您正在尝试一个不适合该模式的 URL,因为它没有 . 也许您可以尝试使用 &lt;constant name="struts.action.excludePattern" value="/rest/*" /&gt;
  • 我收到此错误There is no Action mapped for namespace [/] and action name [rest/requirement/count] associated with context path [/appanalytix-web]. - [unknown location]

标签: java spring rest struts2 jersey


【解决方案1】:

我已经解决了这个问题。我的 web.xml 中有一个 url 重写过滤器。

<filter>
    <filter-name>rewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <init-param>
      <param-name>logLevel</param-name>
      <param-value>commons</param-value>
    </init-param>
    <init-param>
      <param-name>confReloadCheckInterval</param-name>
      <param-value>-1</param-value>
    </init-param>
  </filter>
 <filter-mapping>
    <filter-name>rewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

urlrewrite.xml 我已经添加了

<rule>
        <from>/rest/**</from>
        <to>/rest/$1</to>
    </rule>

【讨论】:

  • 您介意添加更多代码吗? (完整的 web.xml)我有同样的问题。就我而言,我在 struts2 中开发了一个应用程序,现在我们想将 rest 服务与 spring MVC 集成。我想将 Struts2 排除在观看 /rest 之外......但是在休息控制器的 HttpServletRequest 中,我收到了一个 struts2 实例。我实施了你所解释的,但目前没有成功。谢谢
  • 您是否在 struts.xml 中添加了 &lt;constant name="struts.action.excludePattern" value="/rest/.*" /&gt;。这是他们中的大多数人告诉我要做的
  • value="/rest/*" 和 "/rest/*" 都不起作用。我在 web.xml 中将 struts * filter 替换为 *.html 以使其工作,但我想使用 struts 逻辑来排除模式,因为有一天新的 servlet 可能会为 html 提供服务
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
  • 2011-05-27
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多