2016-06-25 6 views
1

クライアントとサーバー間の接続が正常に機能し、サーバー上で正しい関数addEpicが呼び出されます。問題は、Epicの新しいインスタンスがサーバー上に作成されるだけで、クライアントの属性は使用されないということです。 @RequestBodyが問題のようです。 @RequestBodyを自動的にjsonデータから指定されたクラスに変換しないでください。 Epicが@Entityクラスであるという基本的な問題はありますか?@RequestBodyを使用したAngular2のSpring RestContollerへのオブジェクトの投稿

また、クライアントで本体が間違って生成されている可能性があります。 にconsole.log(ボディ)を示しています。

{"epic":{"id":"f97d885a-410f-fa6d-7adc-291e63d35341", "name":"OurName"}} 

しかし、私の威張っ-UIは、ボディモデルシェマのために示しています

{"id":"string", "name":"string"} 

クライアント

addEpic(epic:Epic):Observable<any> { 
    let body = JSON.stringify({epic}); 
    let headers = new Headers({'Content-Type': 'application/json'}); 
    let options = new RequestOptions({headers: headers}); 

    return this.http.post(url + "addEpic", body, options) 
     .map(this.extractHeader) 
     .catch(this.handleError); 
    } 

export class Epic { 
    id: string; 
    name: string; 
} 

サーバー

@RequestMapping(value="/addEpic", method = RequestMethod.POST) 
    public ResponseEntity<Void> addEpic(@RequestBody Epic epic) { 

     // Here it seems that constructor of epic is called and a new instance is created 
     epicRepository.saveAndFlush(epic); 

     return new ResponseEntity<Void>(HttpStatus.CREATED); 
    } 

@Getter 
@Setter 
@NoArgsConstructor 
@AllArgsConstructor 
@Entity 
public class Epic implements Serializable { 
    private static final long serialVersionUID = -670305953055479441L; 

    @Column 
    private String id; 

    @Column 
    private String name 
} 

答えて

3

エンティティEpicには2つのプロパティがあります'id'と 'name'。 JSONで:

{"id":"string", "name":"string"} 

これはSwaggerがあなたに示したものです。

だからあなたのクライアントは、それが間違ってやっている、あなただけの「叙事詩」の周りに{}余分にを削除

let body = JSON.stringify(epic); 

のようにそこにJSONを作成する必要があります。

関連する問題