多个 odata servlet 和端点 - 这可能吗?
Multiple odata servlets and endpoints - is it possible?
我正在为我的 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 注释定义您的 OData servlet 及其端点,并让 Spring 扫描它们。
例如,第一个服务:
@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 {
}
我正在为我的 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 注释定义您的 OData servlet 及其端点,并让 Spring 扫描它们。
例如,第一个服务:
@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 {
}