簡體   English   中英

使用@RequestBody將Angular2中的對象發布到Spring RestContoller

[英]Post object in Angular2 to Spring RestContoller using @RequestBody

客戶端和服務器之間的連接工作正常,並在服務器上調用正確的函數addEpic。 問題是,只在服務器上創建了一個新的Epic實例,但不使用客戶端的屬性。 @RequestBody似乎是個問題。 不應該自動將@RequestBody從json數據轉換為指定的類? Epic是@Entity類的根本問題是什么?

也可能是客戶端錯誤地生成了正文。 console.log(正文)顯示:

{"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
}

您的實體Epic有兩個屬性“id”和“name”。 在JSON中:

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

這正是Swagger向您展示的內容。

所以你的客戶做錯了,你應該在那里創建JSON

let body = JSON.stringify(epic);

只需刪除'史詩'周圍的超級{}。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM