我正在为我的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 / *
您是否尝试将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 {
}