2015-06-18 26 views
0

我有一个JAX-RS弹簧服务,我已经加入了大手笔。 Swagger构建了必须作为静态文件提供服务的json描述。我还包括swagger ui以很好地查看json描述。我的问题是将servlet路径映射到根时,它将不会提供/ swagger下的静态swagger文件。该服务工作得很好。如果将服务映射到不是root的路径(如/ rest/*),两者都可以工作。我宁愿有一条没有“/ rest /”的好路径。如何将SpringServlet映射到根,还可以在根中提供静态内容?

所以当我有<url-pattern>/</url-pattern>服务在根<servicename>/和去<servicename>/swagger/返回404找不到。如果我更改为<url-pattern>/rest/*</url-pattern>,那么该服务的工作范围是<servicename>/rest/,并且可以在<servicename>/swagger处看到放大器。是否可以在不需要服务的情况下进行此项工作?<servicename>/rest/*

我在Spring 3.0.7-RELEASE和JERSEY 1.8上。编辑:此外,这是在Weblogic 10.3.6.0上运行。

web.xml中:

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

 
\t <display-name>Data Access Service</display-name> 
 

 
\t <listener> 
 
\t \t <listener-class>com.my.Startup</listener-class> 
 
\t </listener> 
 
\t <listener> 
 
\t \t <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
 
\t </listener> 
 

 
\t <context-param> 
 
\t \t <param-name>contextConfigLocation</param-name> 
 
\t \t <param-value>classpath:application-context.xml</param-value> 
 
\t </context-param> 
 
\t <context-param> 
 
\t \t <param-name>local-deployment</param-name> 
 
\t \t <param-value>true</param-value> 
 
\t </context-param> 
 

 
\t <servlet> 
 
\t \t <servlet-name>jersey-servlet</servlet-name> 
 
\t \t <servlet-class> 
 
\t \t \t com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class> 
 
\t \t <init-param> 
 
\t \t \t <param-name>com.sun.jersey.config.property.packages</param-name> 
 
\t \t \t <param-value>com.my.rs</param-value> 
 
\t \t </init-param> 
 
\t \t <init-param> 
 
\t \t \t <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
 
\t \t \t <param-value>true</param-value> 
 
\t \t </init-param> 
 
\t \t <load-on-startup>1</load-on-startup> 
 
\t </servlet> 
 

 
\t <servlet-mapping> 
 
\t \t <servlet-name>jersey-servlet</servlet-name> 
 
\t \t <url-pattern>/</url-pattern> 
 
\t </servlet-mapping> 
 
\t 
 
</web-app>

应用context.xml中:

<beans xmlns="http://www.springframework.org/schema/beans" 
 
\t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
 
\t xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" 
 
\t xmlns:aop="http://www.springframework.org/schema/aop" 
 
\t xmlns:mvc="http://www.springframework.org/schema/mvc" 
 
\t xsi:schemaLocation="http://www.springframework.org/schema/beans 
 
\t http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
 
\t http://www.springframework.org/schema/context 
 
\t http://www.springframework.org/schema/context/spring-context-3.0.xsd 
 
\t http://www.springframework.org/schema/tx 
 
\t http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
 
\t http://www.springframework.org/schema/aop 
 
\t http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
 
\t http://www.springframework.org/schema/mvc 
 
\t http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> 
 

 
\t <mvc:annotation-driven /> 
 
    <mvc:resources mapping="/swagger/**" 
 
    \t location="/swagger/" /> 
 
    \t 
 
\t <!--context:annotation-config /--> 
 
\t <context:component-scan base-package="com.my" /> 
 
\t <tx:annotation-driven /> 
 
\t 
 
\t <bean id="dasDatasource" 
 
\t \t class="org.springframework.jndi.JndiObjectFactoryBean"> 
 
\t \t <property name="jndiName" value="jdbc/dasExampleDatasource" /> 
 
\t </bean> 
 

 
\t <bean id="entityManagerFactory" 
 
\t \t class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
 
\t \t <property name="dataSource" ref="dasDatasource" /> 
 
\t \t <property name="jpaVendorAdapter" ref="jpaVendorAdapter" /> 
 
\t \t <property name="jpaDialect" ref="jpaDialect" /> 
 
\t \t <property name="persistenceUnitName" value="dasExampleDatasource" /> 
 
\t \t <property name="loadTimeWeaver"> 
 
\t \t \t <bean class="org.springframework.instrument.classloading.weblogic.WebLogicLoadTimeWeaver" /> 
 
\t \t </property> 
 
\t </bean> 
 

 
\t <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 
 

 
\t <bean id="jpaVendorAdapter" 
 
\t \t class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter" /> 
 

 
\t <bean id="jpaDialect" 
 
\t \t class="org.springframework.orm.jpa.vendor.EclipseLinkJpaDialect" /> 
 

 
\t <bean id="transactionManager" 
 
\t \t class="org.springframework.transaction.jta.JtaTransactionManager"/> 
 

 
\t <bean id="apiListingResourceJSON" 
 
\t \t class="com.wordnik.swagger.jersey.listing.ApiListingResourceJSON" /> 
 
\t <bean id="apiDeclarationProvider" 
 
\t \t class="com.wordnik.swagger.jersey.listing.JerseyApiDeclarationProvider" 
 
\t \t scope="singleton" /> 
 
\t <bean id="resourceListingProvider" 
 
\t \t class="com.wordnik.swagger.jersey.listing.JerseyResourceListingProvider" 
 
\t \t scope="singleton" /> 
 

 
\t <bean id="beanConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig"> 
 
     <property name="title" value="Swagger Sample App"/> 
 
     <property name="version" value="1.0.0" /> 
 
     <property name="basePath" value="http://localhost:8001/myservice/v1"/> 
 
     <property name="resourcePackage" value="com.my.rs,com.my.common.rs"/> 
 
     <property name="scan" value="true"/> 
 
    </bean> 
 

 
</beans>

+0

阅读章节和下一个文档中:HTTP ://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/htmlsingle/#mvc-static-resources –

+0

是的,这是我在发布之前尝试的文档部分,但它不起作用。即使将添加到application-context.xml也没有区别。我没有自定义的默认servlet。我应该补充说这是在weblogic 10.3.6.0上运行的。感谢您的帮助! – Chip

+0

啊,我只是重新读你的问题。映射到/的不是一个弹簧调度器servlet,而是一个泽西岛servlet,所以这是行不通的。 –

回答

0

我通过使用过滤器定义来实现该R而不是servlet的定义。此外,JERSEY 1.8中存在一个错误,导致我的挂载点需要一个尾随正斜杠(https://java.net/jira/browse/JERSEY-1410),所以我更新为JERSEY 1.19。当我的项目功能稳定时,我打算进一步更新到2.x以及Spring 4.x。

这里是一个让我有相同的根目录下我的服务内的招摇UI视图中的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"> 

<display-name>Data Access Service</display-name> 

<listener> 
    <listener-class>com.my.Startup</listener-class> 
</listener> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:application-context.xml</param-value> 
</context-param> 
<context-param> 
    <param-name>local-deployment</param-name> 
    <param-value>true</param-value> 
</context-param> 

<filter> 
    <filter-name>jersey</filter-name> 
    <filter-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</filter-class> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value>com.my.rs</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.feature.Redirect</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.feature.FilterForwardOn404</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>jersey</filter-name> 
    <url-pattern></url-pattern> 
</filter-mapping> 

相关问题