英文:
SpringBoot ignoring my @RequestBody param?
问题
我有以下的控制器:
@Validated
@RestController
public class ProductController {
@Autowired
private ProductService productService;
@PutMapping("/products/{productId}/costs")
public ResponseEntity<Product> updateProductCost(@RequestHeader String authorization, @PathVariable UUID productId, @RequestBody ProductCost productCost) {
Product updatedProduct = productService.updateProductCost(productId, productCost);
return ResponseEntity.ok(updatedProduct);
}
}
ProductCost 模型如下:
@Data
@NoArgsConstructor
@Entity
@Table(name = "product_costs", schema = "mws")
public class ProductCost implements Serializable {
private static final long serialVersionUID = 1789128204447938816L;
@Column
private Double unitCost;
@Column
private Double shippingCost;
@Column
private Double pickPack;
@Column
private Double weightHandling;
@Column
private Double handling;
@Column
private Double fbaFee;
@Column
private Double referFee;
@Column
private String currencyCode;
@CreationTimestamp
private Date createdAt;
@UpdateTimestamp
private Date updatedAt;
@Id
@OneToOne
@JoinColumn(name = "product_id")
@JsonBackReference
private Product product;
}
我的问题是,在调用该端点时,即使我发送了实际数据,productCost 变量的所有字段都被设置为 null。
请求体如下:
{
productCost: {
createdAt: "2020-08-22T21:22:33.989+0000",
currencyCode: "USD",
fbaFee: 0,
handling: 0,
pickPack: 0,
referFee: 0,
shippingCost: 0,
unitCost: 5,
updatedAt: "2020-08-22T21:22:33.989+0000",
weightHandling: 0
}
}
我是否漏掉了明显的什么?为什么产品成本从请求的 body 正确地映射到控制器中的 productCost 变量?
英文:
I have the following Controller:
@Validated
@RestController
public class ProductController {
@Autowired
private ProductService productService;
@PutMapping("/products/{productId}/costs")
public ResponseEntity<Product> updateProductCost(@RequestHeader String authorization, @PathVariable UUID productId, @RequestBody ProductCost productCost) {
Product updatedProduct = productService.updateProductCost(productId, productCost);
return ResponseEntity.ok(updatedProduct);
}
}
The ProductCost model looks like:
@Data
@NoArgsConstructor
@Entity
@Table(name = "product_costs", schema = "mws")
public class ProductCost implements Serializable {
private static final long serialVersionUID = 1789128204447938816L;
@Column
private Double unitCost;
@Column
private Double shippingCost;
@Column
private Double pickPack;
@Column
private Double weightHandling;
@Column
private Double handling;
@Column
private Double fbaFee;
@Column
private Double referFee;
@Column
private String currencyCode;
@CreationTimestamp
private Date createdAt;
@UpdateTimestamp
private Date updatedAt;
@Id
@OneToOne
@JoinColumn(name = "product_id")
@JsonBackReference
private Product product;
My problem is that when calling that endpoint, the productCost variable comes with all fields set to null, even though I'm seding it real data.
The request body looks like:
{
productCost: {
createdAt: "2020-08-22T21:22:33.989+0000"
currencyCode: "USD"
fbaFee: 0
andling: 0
pickPack: 0
referFee: 0
shippingCost: 0
unitCost: 5
updatedAt: "2020-08-22T21:22:33.989+0000"
weightHandling: 0
}
}
Am I missing something obvious? Why is the Product Cost not mapped correctly from my request's body to the productCost variable in the controller?
答案1
得分: 2
只发送productCost的值。
{
"createdAt": "2020-08-22T21:22:33.989+0000",
"currencyCode": "USD",
"fbaFee": 0,
"handling": 0,
"pickPack": 0,
"referFee": 0,
"shippingCost": 0,
"unitCost": 5,
"updatedAt": "2020-08-22T21:22:33.989+0000",
"weightHandling": 0
}
因为您没有将productCost封装在任何其他类中以解析productCost键。
英文:
Send only value of productCost.
{
createdAt: "2020-08-22T21:22:33.989+0000"
currencyCode: "USD"
fbaFee: 0
andling: 0
pickPack: 0
referFee: 0
shippingCost: 0
unitCost: 5
updatedAt: "2020-08-22T21:22:33.989+0000"
weightHandling: 0
}
Because you are not enclosing productCost in any other class to parse the productCost key.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论