2017-03-11 7 views
1

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; 
} 

} 
+0

'EmployeeRating'クラスを表示します。 – RealSkeptic

+0

Springでは、ヘッダ値を手動で指定するのではなく、アノテーションで 'consumes'属性を使用する方が明確です。 – chrylis

+0

がEmployeeRatingクラス – p0tta

答えて

1

contentTypeを更新


はあなたが送っているデータのタイプなので、application/json。デフォルトはapplication/x-www-form-urlencoded; charset=UTF-8です。

application/jsonを使用する場合は、JSONオブジェクトを送信するにはJSON.stringify()を使用する必要があります。

JSON.stringify()は、javascriptオブジェクトをjsonテキストに変換して文字列に格納します。

$.ajax({ 
     url: 'https://myrestURL/addRating', 
     type: 'POST', 
     dataType: 'json', 
     data: JSON.stringify({ 
      '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); 
     } 
    }); 
+0

を追加しましたJSON.stringifyを試してみましたが、動作しません。 – p0tta

関連する問題