Angular向SpringBoot后端传递Purchase对象时Address属性始终为null的问题求助
Angular向SpringBoot后端传递Purchase对象时Address属性始终为null的问题求助
各位大佬好,我现在正在开发一个电商网站,前端用Angular,后端是SpringBoot,数据库用的MySQL。现在遇到一个头疼的问题:用户下单后,我需要把订单详情保存到数据库里,前端会把一个包含customer、address、order、orderItems四个属性的Purchase对象通过POST请求传给后端SpringBoot的Controller,但后端接收到的对象里,address属性总是null,其他三个属性都能正常拿到值。
我已经在Angular里反复确认过,发起请求前purchase对象里的address是有正确数据的——比如调用placeOrder方法前我特意用console.log打印过,address里的街道、城市、邮编这些字段都有合法值,但后端接收后就是null,实在搞不懂哪里出问题了。
先贴一下我Angular这边的CheckoutService代码:
export class CheckoutService { private purchaseUrl = "http://localhost:8080/api/checkout/purchase"; constructor(public httpClient: HttpClient) { } placeOrder(purchase: Purchase): Observable<any> { return this.httpClient.post<Purchase>(this.purchaseUrl, purchase); } }
再补充一些关键的定义信息:
- 前端的
Purchase及相关接口:
export interface Purchase { customer: Customer; address: Address; order: Order; orderItems: OrderItem[]; } export interface Address { street: string; city: string; state: string; zipCode: string; }
- 后端SpringBoot的
Purchase实体类:
public class Purchase { private Customer customer; private Address address; private Order order; private List<OrderItem> orderItems; // 省略所有属性的getter和setter方法 }
- 后端接收请求的Controller代码:
@RestController @RequestMapping("/api/checkout") public class CheckoutController { @PostMapping("/purchase") public ResponseEntity<String> placeOrder(@RequestBody Purchase purchase) { // 这里打印address,结果始终是null System.out.println("Received address: " + purchase.getAddress()); // 后续的订单保存逻辑... return new ResponseEntity<>("Order placed successfully", HttpStatus.OK); } }
我还检查了浏览器的网络请求Payload,里面确实包含address的完整数据,比如:
{ "customer": { "firstName": "Sidharth", "lastName": "Manikandan" }, "address": { "street": "123 Main St", "city": "New York", "state": "NY", "zipCode": "10001" }, "order": {"totalPrice": 99.99}, "orderItems": [{"productId": 1, "quantity": 2}] }
我怀疑过是不是属性名大小写不匹配?但两边的属性名都是address,完全一致;也检查过后端实体类的getter/setter是不是写错了,比如写成了getAdress()少了个d?但确认过是正确的getAddress()和setAddress()。
有没有大佬遇到过类似的问题?或者能给我指个排查方向?实在卡在这里动不了了,谢谢大家!
备注:内容来源于stack exchange,提问作者Sidharth Manikandan
相关产品推荐
相关产品推荐

