Java 佯装客户端:如果API的响应有两种不同的格式,如何优雅地处理这种情况?
在我的项目中,有一个假客户,如下所示:Java 佯装客户端:如果API的响应有两种不同的格式,如何优雅地处理这种情况?,java,spring,spring-cloud-feign,feign,Java,Spring,Spring Cloud Feign,Feign,在我的项目中,有一个假客户,如下所示: @FeignClient(name = "myFeignClient", url = "${remote-url}", configuration = {MyApiClient.Config.class}) public interface ApiClient { @PostMapping(value = "/product", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@FeignClient(name = "myFeignClient", url = "${remote-url}", configuration = {MyApiClient.Config.class})
public interface ApiClient {
@PostMapping(value = "/product", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
ProductDTO getProduct(@RequestBody ProductReqParam req);
... // other @GetMapping or @PostMapping method is ignored here
class Config {
@Bean
ErrorDecoder errorDecoder() {
return new FeignErrorDecoder();
}
static class FeignErrorDecoder implements ErrorDecoder {
@Override
public Exception decode(String methodKey, Response response) {
if (response.body() != null) {
return new MyFeignException(response.status(), response.body().toString());
} else {
return new MyFeignException(response.status());
}
}
}
}
}
根据我们第三方供应商的api文件,ProductDTO如下
public class ProductDTO {
@JsonProperty("Result")
private ProductDTO.Result result;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Result {
@JsonProperty("STATUS")
private String status;
@JsonProperty("TOTALRECORD")
private Integer recordCount;
@JsonProperty("DATA")
private List<Product> productList;
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class Product {
@JsonProperty("ID")
private Integer id;
@JsonProperty("NAME")
private String name;
@JsonProperty("PRICE")
private String price;
}
}
是的,第三方api开发人员在构建他们对我们的响应方面做得非常糟糕,他们应该将单个对象放入列表中,然后返回给我们,但他们没有,因此我们必须自己处理这两个不同的响应
我不知道如何处理这样的案件。我最初的计划是注入一个定制的假解码器bean,在解码方法中专门处理“/product”api。但是它会干扰其他方法,而且我已经有了一个ErrorDecoder bean,这可能会引起潜在的问题?为什么会有2个
@JsonProperty(“数据”)
注释?第二个来自哪里?@Boris有两个不同的jsonresponses@Boris它们不在同一个ProductDTO类中,比如说,我可以定义两个ProductDTO类ProductDTO1和ProductDTO2,每个类都有不同的@JsonProperty(“数据”),如果您有@JsonProperty(“数据”)私有列表productList,会发生什么
在ProductDTO2中?@Boris我在问如何处理不同的响应,一个是对象列表,另一个是对象列表
@JsonProperty("DATA")
private Product product;