Jersey REST を使用して構築された Web サービスに JSON を送信する際に問題が発生しました。データがサーバーに到着しないようです。
全体的なタスク フローは次のようになります。
Javascript POST JSON -> ウェブサーバー -> ウェブサーバーが JSON を取得して出力
JSON データをサーバーに POST することになっている Javascript を次に示します。パスは次の/posttest
とおりです。
<script type="text/javascript">
$(function() {
var name = "Tony";
$.post(
'/posttest',
function (data) {
alert("sune " + data.name);
});
})
</script>
これらすべてのクラスを実行する Web サーバー (Grizzly) があります。
このクラスは、JAX-RS API を使用して、JSON データを使用する POST 要求を処理します。
@Path("/posttest")
public class PostTest {
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response doPost(StatusBean b) {
System.out.println("---> " + b.getName());
StatusBean statusBean = new StatusBean();
return Response.status(Response.Status.ACCEPTED).entity(statusBean).build();
}
データがシリアル化される Bean の定義は次のとおりです。
@XmlRootElement
public class StatusBean {
private String name;
public StatusBean() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name= name;
}
}
コンソールにデータを出力するテスト クライアント クラスを次に示します。
ClientConfig cc = new DefaultClientConfig();
Client c = Client.create(cc);
WebResource r = c.resource("http://localhost:9998/posttest");
StatusBean post = r.type(MediaType.APPLICATION_JSON_TYPE).post(StatusBean.class, new StatusBean());
System.out.println("--> " + post.getName());