我正在使用Spring访问RESTful端点,该端点返回一个FeignClient,我希望获得作为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); 在“details”对象中,ProdId和ProdName都为空。我是不是漏掉了什么?首先,有没有可能得到JSON而不是XML形式的响应?
发布于 2020-02-25 21:00:25
如果RESTful服务被编程为只返回xml,那么就不能要求它提供基于json响应。
但在您的例子中,问题出在您想要映射结果的类上。这个响应实际上将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"),对于ProductDetails中的字段为@JsonProperty("ProdId")和@JsonProperty("ProdName") )。
https://stackoverflow.com/questions/60387771
复制相似问题