ngtokuの日記

主に雑記帳です。SNSではngtokuのID取れなかったんで、別のIDでやってます。

SAP HANAにoData via olingo(V2) with ベーシック認証でアクセス(POST)

以下はエントリー読むだけだったんで、今度はPOSTでデータ作成。
SAP HANAにoData via olingo(V2) with ベーシック認証でアクセス - ngtokuの日記


以下にあるサンプルコードだとHTTPステータスコードがBad Requestだったんで、試しにデータ本体だけ突っ込んだらレコード作成できました。
my-car-service/OlingoSampleApp.java at master · qinhaizong/my-car-service · GitHub


夜も遅いので中途半端だけど変更メソッドだけログ的に記載。

	  private ODataEntry writeEntity(Edm edm, String absolutUri, String entitySetName, 
	      Map<String, Object> data, String contentType, String httpMethod) 
	      throws EdmException, MalformedURLException, IOException, EntityProviderException, URISyntaxException {

	    HttpURLConnection connection = initializeConnection(absolutUri, contentType, httpMethod);
	    
        OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
        // 本当はここをパラメータdataからJsonに変更する。MapでなくてJacksonを使ってBeanから変換したほうがいいかなって
        out.write("{\"ID\":\"GV006\",\"NAME\":\"'NEW DATA TOKU NG2'\",\"GROUP\":\"'POST DATA'\",\"CREATE_DATE\":\"\\/Date(1587911931893)\\/\"}");
        out.close();
        connection.connect();
        final int status = connection.getResponseCode();
        print("response code=" + status);
	    ODataEntry entry = null;
	    EdmEntityContainer entityContainer = edm.getDefaultEntityContainer();
	    EdmEntitySet entitySet = entityContainer.getEntitySet(entitySetName);
        if (status == 201) {
  	      InputStream content = connection.getInputStream();
  	      content = logRawContent(httpMethod + " request on uri '" + absolutUri + "' with content:\n  ", content, "\n");
  	      entry = EntityProvider.readEntry(contentType,
  	          entitySet, content, EntityProviderReadProperties.init().build());
        }

	    connection.disconnect();

	    return entry;
	  }

うぇーい。