Spring WebClient在调用另一个微服务时使用@PATCH方法进行部分更新



我有Node.js和Java服务,我正在尝试使用PATCH方法并更新请求主体中的单个项。当我将下面的请求正文直接发送到Node.js服务(http://localhost:8004/products/xxx(时,它只是更新大小,其余项没有更改。

{
"size": 42,
}

但是,当我调用调用Node.js服务的Java服务(http://localhost:8005/products/xxx(时,它会更新大小,但其余项设置为null,如下所示。我做错了什么?

Updated product {
title: null,
desc: null,
img: null,
categories: null,
size: '42',
price: null
}

Java

public Mono<Products> updateProduct(String id, Products editProduct){
return  webClient
.patch()
.uri("/products/{id}", id)
.body(Mono.just(editProduct), Products.class)
.retrieve()
.bodyToMono(Products.class);
}
@PatchMapping("/products/{id}")
@ResponseStatus(code = HttpStatus.OK)
public Mono<Products> updateProduct(@PathVariable("id") String id, @Validated @RequestBody Products editProduct){
return  basketService.updateProduct(id, editProduct);
}

Node.js

router.patch('/:id', async (req, res) => {
try{
const productId = req.params.id
const updates = req.body

console.log("Updated product", updates)

const result = await Product.findByIdAndUpdate(productId, updates)
res.status(200).json(result);

}catch(err) {
res.status(500).json(err);
}
})

我认为您可以对Products类进行注释,让Jackson知道它不应该序列化null值:

@JsonInclude(Include.NON_NULL)
class Products {
//...
}

您也可以使用Spring Boot中的配置属性全局执行此操作,但这也会影响应用程序的JSON有效负载服务器。

最新更新