2017-06-08 4 views
0

私はJavaでRESTfulクラウドアプリケーションを開発しています。POST、DELETE、PUT、GETのすべてのメソッドを実装したら、単純なJavaクライアントを通じてそれらをテストする必要があります。私は正常にGETをテストし、次のようにDELETE:POSTメソッドをテストするためにRESTfulなクライアント

String findById = target.path("..").path("..").path("17").request() 
.accept(MediaType.APPLICATION_JSON).get(String.class).toString(); 
System.out.println(findById); 

をしかし、今、私はPUTやPOSTを試してみたいとき、私はそれを動作させることはできません。 「引数(文字列、クラス)には適用されません型SyncInvokerのメソッドポスト(エンティティクラス)」を

String addBook = target.path("..").path("..").queryParam("author", "OO") 
       .queryParam("language", "OO") 
       .queryParam("publisher", "OO") 
       .queryParam("subject", "OO") 
       .queryParam("title", "OO") 
       .queryParam("isbn", "OO").request().accept(MediaType.APPLICATION_JSON) 
       .post(String.class); 

エラーが.post期待していると述べている:私は、次の試してみました。

私の質問は、エンティティが何であるべきか、どのように指定するべきかということです。クライアントプロジェクトは別々に実行されており、メイン(サーバー)プロジェクトでは実行されていません。

+0

)を取得した後、うーん、あなたは.toStringを固執することができます投稿後に()? – nafas

+0

アプリケーションの作成にどのツールを使用していますか?多くのフレームワークは特定のテストツール(例えば、Spring MockMvcやSpring REST Docsなど)を持っています。 – chrylis

答えて

0

投稿パラメータを使用して投稿リクエストを送信することはできません。 あなたはJSONのような異なるコンテンツタイプにすることができる投稿本体を使用する必要があります。 あなたはこのような何かにあなたのコードを変更する必要があります。私はこれで働いていませんが、動作するコードを見て、それは(.toStringを持って

Map<String, Object> body = new HashMap<>(); 
body.put("language", "OO"); 
..... 
String json = (new ObjectMapper()).writeValueAsString(body); 
Entity<String> entity = javax.ws.rs.client.Entity.json(json); 
String result = client.target(fullUrl).request().method("POST", entity, String.class); 
+0

@MarkoOtasevicエンティティはjavax.ws.rs.client.Entityですか? Object Mapperでは、Jacksonのコア依存関係が必要です。あなたはMavenを使用する場合は、あなたが簡単なJavaを使用している場合、 ジャクソンコア-2.1.Xをクラスパスに以下を追加する代わりに com.fasterxml.jackson.core ジャクソン、データバインド 2.1.2 をPOMするために、この依存関係を追加します jackson-databind-2.1.X –

+0

Nicoloに感謝します。これは素晴らしい解決策です。 –

関連する問題