2016-07-19 1 views
0

Я разработал ODataClient в Java для создания новых объектов. У меня возникают трудности с созданием новых объектов. Я взял на себя инициативу, чтобы увидеть все сообщения, отправленные моим клиентом с Fiddler.Odata V4 Client: метод getEntityCreate

 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(); 

ниже первой линии тела я получил с Скрипач:

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

Я проверил вручную с Скрипач, чтобы создать новый объект и первую строку тела сообщения должно быть:

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

Я хотел бы узнать, можно ли установить тело запроса с помощью Odata, чтобы удалить «@» и «#».

Thanks,

ответ

0

Я нашел альтернативное решение этой проблемы. Я не использую полностью библиотеки 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 + созданный объект. Я использую librairie org.apache.http для отправки http-сообщения на сервер OData.