2016-06-25 2 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에는 두 가지 속성이 있습니다. 'id'와 'name'. JSON에서 :

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

이 자신감 당신을 보여 정확히 것입니다.

그래서 클라이언트가 잘못하고있다, 당신은 그냥 '서사시'주위에 {}는 superflous를 제거

let body = JSON.stringify(epic); 

처럼 거기에 JSON을 만들어야합니다.

관련 문제