[英]How to send multiple objects from Angular2 to Java Spring backend
I am trying to send two objects ( CustomerAcct
and Product
) from Angular 2 to restful services (Java Spring). 我正在尝试将Angular 2中的两个对象( CustomerAcct
和Product
)发送到静态服务(Java Spring)。 I am using a wrapper object called CustProduct
, which has two objects in it, CustomerAcct
and Product. 我正在使用一个名为CustProduct
的包装对象,其中有两个对象CustomerAcct
和Product。 Somehow on the back end CustomerAcct
object is null but Product object is not. 后端CustomerAcct
对象以某种方式为null,但Product对象不是。
Here is my code: 这是我的代码:
GUI: 界面:
CustProduct class: CustProduct类别:
export class CustProduct { public ca: CustomerAcct; public prod: Product }
Service: 服务:
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);
}
Backend code: 后端代码:
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
}
I don't understand why it is dropping CustomerAcct
object. 我不明白为什么它会丢弃CustomerAcct
对象。 If I send CustomerAcct
object in @RequestBody
by itself, it works but not in the wrapper object. 如果我自己在@RequestBody
发送CustomerAcct
对象,则它有效,但在包装对象中不起作用。 My class definitions on GUI and backend are same. 我在GUI和后端上的类定义是相同的。
Thanks for you help. 感谢您的帮助。
You're using a simple JSON conversion, which means that in the JSON object your keys are ca
and prod
. 您正在使用简单的JSON转换,这意味着在JSON对象中,您的密钥是ca
和prod
。 By default, Jackson expects the keys to match the field names, which are customerAcct
and product
. 默认情况下,Jackson期望键与字段名称匹配,即customerAcct
和product
。 The simplest approach is probably to annotate your Java fields with @JsonField("ca")
. 最简单的方法可能是使用@JsonField("ca")
注释Java字段。 (Alternately, you could rename the properties in either Java or JavaScript.) (或者,您可以使用Java或JavaScript重命名属性。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.