首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring将RESTful FeignClient响应视为RESTful

Spring将RESTful FeignClient响应视为RESTful
EN

Stack Overflow用户
提问于 2020-02-25 13:01:28
回答 1查看 2.2K关注 0票数 0

我正在使用Spring访问RESTful端点,该端点返回一个FeignClient,我希望获得作为JSON的响应,该响应将映射到POJO。

代码语言:javascript
复制
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); 

在“details”对象中,ProdId和ProdName都为空。我是不是漏掉了什么?首先,有没有可能得到JSON而不是XML形式的响应?

EN

回答 1

Stack Overflow用户

发布于 2020-02-25 21:00:25

如果RESTful服务被编程为只返回xml,那么就不能要求它提供基于json响应。

但在您的例子中,问题出在您想要映射结果的类上。这个响应实际上将ProductDetails标记包装到ns3:Products中。

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

代码语言:javascript
复制
public class Product {   //class name can be anything 
    private ProductDetails ProductDetails;
    //getters, setters
}

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

如果您的响应中仍然有空值,那么这可能是由于ObjectMapper配置的原因。但是您始终可以为您的字段添加@JsonProperty注释(在本例中,对于Product中的ProductDetails字段为@JsonProperty("ProductDetails"),对于ProductDetails中的字段为@JsonProperty("ProdId")@JsonProperty("ProdName") )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60387771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档