java - Odata V4客户端: getEntityCreate method

标签 java json odata odata-v4

我用 Java 开发了一个 ODataClient 来创建新实体。我在创建新实体时遇到困难。我主动用Fiddler查看客户发送的所有消息。

        ODataEntityCreateRequest<ClientEntity>  request= 
            client.getCUDRequestFactory()
            .getEntityCreateRequest(new URI("http://localhost:8888/"), clientEntity);

    request.addCustomHeader("Content-Type", "application/json;odata.metadata=minimal");
    request.setAccept("application/json;odata=minimalmetadata");

    ODataEntityCreateResponse<ClientEntity> response = request.execute();

在我用 Fiddler 获得的正文的第一行下方:

17b
{"@odata.type":"#ODataDemo.Product", ....}

我用Fiddler手动测试创建一个新实体,消息正文的第一行应该是:

 {"odata.type":"ODataDemo.Product", ....}

我想知道是否可以使用 Odata 设置请求正文以删除“@”和“#”。

谢谢

最佳答案

我找到了这个问题的替代解决方案。我不完全使用 OData 库。我创建了发送请求的方法。

public void insertData(String entityName, Entity entity)
{       
    try {
        ResWrap<Entity> resW = new ResWrap<Entity>(new URI(this.baseURI.concat("/").concat(entityName)), "full", entity);
        ClientEntity clientEntity = this.client.getBinder().getODataEntity(resW);
        //String message = getMessageRebuild(client.getWriter().writeEntity(clientEntity, ContentType.APPLICATION_JSON));

        InputStream is = client.getWriter().writeEntity(clientEntity, ContentType.APPLICATION_JSON);

        if(is != null)
        {
            System.out.println("POST: "+post(this.baseURI.concat("/").concat(entityName), is));
            //System.out.println("POST:"+post("http://localhost:8888/"+entityName, is));
        }
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ODataSerializerException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public String post(String url,InputStream message) throws Exception{
    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);
    //post.addHeader("Content-Type", "application/json;odata.metadata=minimal");
    //post.addHeader("Accept", "application/json;odata=verbose");
    post.addHeader("Content-Type", "application/json");
    post.addHeader("Accept", "application/json");
    HttpEntity entity = new ByteArrayEntity(IOUtils.toByteArray(message));
    post.setEntity(entity);
    HttpResponse response = client.execute(post);
    String result = EntityUtils.toString(response.getEntity());
    return result;
}

insertData 采用两个参数:entityName + 我生成的Entity。 我使用 librairie org.apache.http 将 http 消息发送到 OData 服务器。

关于java - Odata V4客户端: getEntityCreate method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38457573/

相关文章:

javascript - 如何获取根json元素中的元素数量

json - 已弃用的 jp@gc 的替代品 - JSON 格式后处理器

linq - OData "where ID in list"查询

java - 在 hadoop 中运行 jar 文件时出错

java - 如何在 hibernate 中的多对一映射上定义反向级联删除

java - 为什么我的应用程序名称与 Activity 名称相同?

Java类可以编译但无法加载

json - JMESPath 从对象的对象生成对象数组

c# - 在无类型实体上应用查询选项

$expand 中的 OData V4 不止一个选项