JavaのRESTサービスのリソースクラスに次のメソッドがあります。
@POST
@Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Player createCustomer(Customer customer)
{
System.out.println("Request for Create");
System.out.println(""+customer.getID()+"\n"+customer.getTableID()+"\n"+customer.getCustNick());
//Above statement should print the details I send via JSON object
//return custdao.create(customer); //Want to call this to add new "customer" into database table.
return player;
}
そして、フォームの入力フィールドに入力して作成ボタンがクリックされたときに呼び出すjQueryメソッドに従います。
function createEntry() {
var formData = JSON.stringify({
"ID" : $("input[name='txtID']").val(),
"tableID" : $("input[name='txtTableID']").val(),
"custNick" : $("input[name='txtNick']").val()
});
console.log(formData); //Just to see if form details are JSON encoded.
$.ajax({
type: "POST",
contentType: "application/json",
url: baseURL,
dataType: "json",
data: formData,
success: function(data) {
console.log("Customer Added!");
$("div.response").append("<h3>New Customer ("+ $("input[name='txtNick']").val() +") Added on the Server</h3>");
}
});
}
しかし、サーバー上で、空の「顧客」オブジェクトを取得しています。ここで何が間違っているのでしょうか。さらに詳細が必要な場合はお知らせください(カスタマークラスモデルに関して)。
更新:以下はCustomerクラスです。
/*ignore imports, all required imports are included */
@XmlRootElement
public class Customer
{
private int id;
private int tableid;
private String custnick;
public int getID()
{
return id;
}
public void setID(int id)
{
this.id = id;
}
....
....
/* Similar Setter-Getter Methods for the fields */
}
問題は「Customer」クラスのXMLスキーマに関係していると思います。また、JSONオブジェクトで送信するノード名がスキーマと一致しないため、モデルクラスのセッターメソッドでフィールドをマッピングできない場合があります。確かに。