クライアントとサーバー間の接続は正常に機能し、正しい関数 addEpic がサーバー上で呼び出されます。問題は、Epic の新しいインスタンスがサーバー上に作成されるだけで、クライアントからの属性が使用されないことです。@RequestBody が問題のようです。@RequestBody を json データから指定されたクラスに自動的に変換すべきではありませんか? Epic が @Entity クラスであるという根本的な問題はありますか?
また、クライアントでボディが誤って生成されている可能性もあります。console.log(body) は以下を示します:
{"epic":{"id":"f97d885a-410f-fa6d-7adc-291e63d35341", "name":"OurName"}}
しかし、私のswagger-uiは、ボディモデルのShemaを示しています:
{"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
}