首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OData (Olingo)“抑制”端点

OData (Olingo)“抑制”端点
EN

Stack Overflow用户
提问于 2016-12-13 07:51:33
回答 1查看 1.1K关注 0票数 0

我的问题是,抑制由Olingo自动提供的端点的最佳方法是什么?

我正在使用一个基于Spring并使用Apache短程序的简单应用程序,这是我的Olingo.On注册:

代码语言:javascript
复制
@Configuration
public class CxfServletUtil{

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

我的ODataJPAServiceFactory在哪里

代码语言:javascript
复制
@Component
public class CustomODataJPAServiceFactory extends ODataJPAServiceFactory implements ApplicationContextAware {

private static ApplicationContext context;

private static final String PERSISTENCE_UNIT_NAME = "myPersistenceUnit";
private static final String ENTITY_MANAGER_FACTORY_ID = "entityManagerFactory";

@Override
public ODataJPAContext initializeODataJPAContext()
        throws ODataJPARuntimeException {
    ODataJPAContext oDataJPAContext = this.getODataJPAContext();
    try {
        EntityManagerFactory emf = (EntityManagerFactory) context.getBean(ENTITY_MANAGER_FACTORY_ID);
        oDataJPAContext.setEntityManagerFactory(emf);
        oDataJPAContext.setPersistenceUnitName(PERSISTENCE_UNIT_NAME);
        return oDataJPAContext;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}

...

我的实体很简单..。

代码语言:javascript
复制
@Entity
public class User {
@Id
private String id;

@Basic
private String firstName;

@Basic
private String lastName;
....

Olingo正在完美地完成它的工作,它帮助我为我的实体生成CRUD操作的所有端点。

我的问题是:我如何“抑制”其中一些?例如,假设我不想启用delete my实体。

我可以尝试使用过滤器-但这似乎有点苛刻。还有其他更好的方法来解决我的问题吗?

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-26 09:23:13

正如您已经说过的,您可以使用一个过滤器,但是您实际上与Olingo使用的URI模式耦合在一起。而且,当您有多个相关的实体集时,事情会变得复杂(因为您可以从一个实体集合导航到另一个实体集,从而使URI更加复杂)。

根据你想要达到的目标,你可以做两件事:

  1. 如果希望对允许或不允许的操作进行细粒度控制,可以为ODataSingleProcesor创建一个包装器,并在不允许操作的地方抛出ODataExceptions。您可以始终抛出异常(即完全禁用操作类型),也可以使用URI info参数获取目标实体集,并决定是否应该抛出异常或调用标准的单处理器。我使用这种方法创建了一个只读OData服务这里 (基本上,我只是创建了一个ODAtaSingleProcessor,它将一些调用委托给标准的ODAtaSingleProcessor+重写了服务工厂中的一个方法,以便在包装器中包装标准的单处理器)。
  2. 如果希望完全取消公开/忽略给定实体或某些属性,则可以使用JPA映射模型结束排除所需的组件。您可以在这里找到这样一个映射的示例:github。映射模型只是一个XML文件,它将JPA实体/属性映射到EDM实体类型/属性。为了让olingo获得它,您可以将文件名传递给初始化方法中的setJPAEdmMappingModel方法的ODataJPAContext方法。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41115991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档