我正在尝试将两个对象(CustomerAcct
和Product
)从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和后端的类定义是相同的。
谢谢你的帮助。
答案 0 :(得分:1)
您正在使用简单的JSON转换,这意味着在JSON对象中,您的密钥为ca
和prod
。默认情况下,Jackson希望密钥与字段名称匹配,即customerAcct
和product
。最简单的方法可能是使用@JsonField("ca")
来注释Java字段。 (或者,您可以使用Java或JavaScript重命名属性。)