1

クライアントとサーバー間の接続は正常に機能し、正しい関数 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
}
4

1 に答える 1

3

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

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

これはまさに Swagger が示したものです。

クライアントが間違っているので、JSONを次のように作成する必要があります

let body = JSON.stringify(epic);

「epic」の余分な {} を削除するだけです。

于 2016-06-25T13:19:24.937 に答える