多个odata servlet和端点-可能吗?

问题描述 投票:1回答:1

我正在为我的Web应用程序使用oData servlet,并希望为其添加其他端点。

例如:/ odata / *并且:/ pathVariable / {pathVariable} / odata / *

而“ pathVariable”为我传递附加数据和变量服务。

我尝试复制servlet方法并将其定向到新的URL映射失败。

这是我当前的代码:

@Bean
public ServletRegistrationBean odataServlet() {
    ServletRegistrationBean<CXFNonSpringJaxrsServlet> odataServlet = new ServletRegistrationBean<>(new CXFNonSpringJaxrsServlet(), "/odata/*");
    Map<String, String> initParameters = new HashMap<>();
    initParameters.put("javax.ws.rs.Application", "org.apache.olingo.odata2.core.rest.app.ODataApplication");
    initParameters.put("org.apache.olingo.odata2.service.factory", "com.context.JPAServiceFactory");
    odataServlet.setInitParameters(initParameters);
    return odataServlet;
}

我的预期结果是可用于oData的多个端点:

/ odata

/ pathName / data / odata / *

java spring servlets web-applications odata
1个回答
1
投票

您是否尝试将2个不同的servlet创建为2个不同的OData服务?

如果是这样,您可以尝试使用javax的@WebServlet批注并让Spring扫描它们来定义OData servlet及其端点。

例如,第一服务:

@WebServlet(urlPatterns = {"/odata/*"}, initParams = {
        @WebInitParam(name = "javax.ws.rs.Application", value = "org.apache.olingo.odata2.core.rest.app.ODataApplication"),
        @WebInitParam(name = "org.apache.olingo.odata2.service.factory", value = "com.context.JPAServiceFactory")
})
public class MyODataServlet extends ODataServlet {

}

第二项服务:

@WebServlet(urlPatterns = {"/another-odata/*"}, initParams = {
        @WebInitParam(name = "javax.ws.rs.Application", value = "org.apache.olingo.odata2.core.rest.app.ODataApplication"),
        @WebInitParam(name = "org.apache.olingo.odata2.service.factory", value = "com.context.JPAServiceFactory")
})
public class AnotherODataServlet extends ODataServlet {

}

请不要忘记使用以下方法对它们进行扫描:

@Configuration
@ComponentScan(basePackages = {
        <packages of JPAServiceFactory and other requires beans>
})
@ServletComponentScan(basePackages = <the web servlets package>)
public class ODataConfig {

}
© www.soinside.com 2019 - 2024. All rights reserved.