My Springコントローラとクライアント側のJavascriptコードは以下のとおりですが、何らかの理由でJavascriptオブジェクトがObjectフォームのSpringコントローラに到達できません。次のように私のコントローラのコードは次のとおりです。JavascriptオブジェクトをJavaモデルに変換できません
@RequestMapping(value = "/addRating", method = RequestMethod.POST, headers = "Accept=application/json")
public EmployeeRating addRating(@ModelAttribute("employeeRating") EmployeeRating employeeRating) {
if(employeeRating.getId()==0)
{
employeeRatingService.addRating(employeeRating);
}
else
{
employeeRatingService.updateRating(employeeRating);
}
return employeeRating;
}
下のマイJavascriptコード:
$.ajax({
url: 'https://myrestURL/addRating',
type: 'POST',
dataType: 'json',
data: {
'id':5,
'name': 'Name',
'rating': '1'
},
contentType: 'application/json; charset=utf-8',
success: function (result) {
// CallBack(result);
window.alert("Result: " + result);
},
error: function (error) {
window.alert("Error: " + error);
}
});
不一致がありませんので、JavaでEmployeeRatingオブジェクトは、ID、名前と評価フィールドがあります。モデルクラスに
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
/*
* This is our model class and it corresponds to Country table in database
*/
@Entity
@Table(name="EMPLOYEERATING")
public class EmployeeRating {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
int id;
@Column(name="name")
String name;
@Column(name="rating")
long rating;
public EmployeeRating() {
super();
}
public EmployeeRating(int i, String name,long rating) {
super();
this.id = i;
this.name = name;
this.rating=rating;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getRating() {
return rating;
}
public void setRating(long rating) {
this.rating = rating;
}
}
'EmployeeRating'クラスを表示します。 – RealSkeptic
Springでは、ヘッダ値を手動で指定するのではなく、アノテーションで 'consumes'属性を使用する方が明確です。 – chrylis
がEmployeeRatingクラス – p0tta