如何将多个对象从Angular2发送到Java Spring后端

时间:2016-10-11 17:20:20

标签: java angularjs spring angular

我正在尝试将两个对象(CustomerAcctProduct)从Angular 2发送到restful服务(Java Spring)。我正在使用一个名为CustProduct的包装器对象,其中包含两个对象CustomerAcct和Product。不知何故,后端CustomerAcct对象为null,但Product对象不为。

这是我的代码:

GUI:

CustProduct类:

export class CustProduct { public ca: CustomerAcct; public prod: Product }

服务:

addProductToCustomer(cp: CustProduct): Observable<Boolean> {

     let body = JSON.stringify(cp);
     let headers = new Headers({'Content-Type': 'application/json'});
     let options = new RequestOptions({ headers: headers });
     let url = 'my-url';

     return this.http.post(my-url, body, options)
                     .map(this.extractData)
                     .catch(this.hadnleError);
}

后端代码:

java classes:
@Entity
@Table(name="CUSTOMER_ACCT")
public class CustomerAcct {
    @Id
@Column(name="CUSTOMER_ACCT_ID")
private long CUSTOMER_ACCT_ID;
@Column (name="CUSTOMER_NAME")
private long CUSTOMER_NAME;

other additional fields
}

@Entity
@Table(name="PRODUCT")
public class Product {
@Id
@Column(name="PRODUCT_ID")
private long PRODUCT_ID;
@Column(name="PROD_DESC")
private String PROD_DESC;

other additional fields
  }

public class CustomerProduct {
CustomerAcct customerAcct;
Product product;
}

public boolean addProductToCustomer(@RequestBody CustomerProduct cp) {
       CustomerAcct ca = cp.customerAcct;
       Product prod = cp.product;

       // Here CustomerAcct is null, but I do see data in Product object
}

我不明白为什么它会丢弃CustomerAcct个对象。如果我自己在CustomerAcct中发送@RequestBody对象,它可以工作但不在包装器对象中。我在GUI和后端的类定义是相同的。

谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您正在使用简单的JSON转换,这意味着在JSON对象中,您的密钥为caprod。默认情况下,Jackson希望密钥与字段名称匹配,即customerAcctproduct。最简单的方法可能是使用@JsonField("ca")来注释Java字段。 (或者,您可以使用Java或JavaScript重命名属性。)