gpt4 book ai didi

java - Spring FeignClient - 将 RESTful xml 响应视为 JSON

转载 作者:行者123 更新时间:2023-12-01 18:15:02 27 4
gpt4 key购买 nike

我正在使用 Spring FeignClient 访问 RESTful 端点,该端点返回一个 xml,我想要获取 JSON 格式的响应,该响应又会映射到 POJO。

1) When I access the endpoint on the browser, I get response as below, 
<ns3:Products xmlns:ns2="http://schemas.com/rest/core/v1" xmlns:ns3="http://schemas/prod/v1">
<ProductDetails>
<ProdId>1234</ProdId>
<ProdName>Some Text</ProdName>
</ProductDetails>
</ns3:Products>


2) @FeignClient(value = "productApi", url = "http://prodservice/resources/prod/v1")
public interface ProductApi {

@GetMapping(value="/products/{productId}", produces = "application/json")
ProductDetails getProductDetails(@PathVariable("productId") String productId)

// where, /products/{productId} refers the RESTful endpoint
// by mentioning, produces = "application/json", I believe the response xml would be converted to JSON Java POJO.


3) POJO
public class ProductDetails {
private String ProdId;
private String ProdName;

//...setters & getters
}

4) Service Layer
ProductDetails details = productApi.getProductDetails(productId);

在“详细信息”对象中,ProdId 和 ProdName 均为 null。我在这里错过了什么吗?首先,是否可以获取 JSON 格式的响应而不是 XML 格式的响应?

最佳答案

如果该 RESTful 服务被编程为仅返回 xml 响应,那么您就无法要求它提供基于 json 的响应。

但就您而言,问题出在您想要映射结果的类上。此 xml 响应实际上将 ProductDetails 标记包装到 ns3:Products 中。

因此,您需要创建另一个类来保存对 ProductDetails 对象的引用:

public class Product {   //class name can be anything 
private ProductDetails ProductDetails;
//getters, setters
}

然后将 getProductDetails 方法的类型更改为 Product

如果您的响应中仍然出现空值,则可能是由于 ObjectMapper 配置所致。但是您始终可以为您的字段添加 @JsonProperty 注释(在在这种情况下,Product 中的 ProductDetails 字段将为 @JsonProperty("ProductDetails"),而 @JsonProperty("ProdId") @JsonProperty("ProdName") 用于 ProductDetails 中的字段。

关于java - Spring FeignClient - 将 RESTful xml 响应视为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60387771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com