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;