【问题标题】:How to link Feign Clients Object to spesific response key如何将 Feign Clients 对象链接到特定的响应键
【发布时间】:2019-01-30 13:11:25
【问题描述】:

我正在创建一个 REST API 以在 Spring Boot 上使用 Feign Client 调用另一个 API。生成的 JSON 响应与我的模型不完全相同。这是我得到的:

{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "DC-01",
      "site": "10.168.3.11",
      "created_at": "2018-12-27T06:28:21.098134+00:00",
      "modified_at": "2019-01-14T03:48:57.109484+00:00"
    }
  ],
}

我的模型是这样的:

public class Providers {
    private Integer id;
    private String name;
    private String site;
    private Date created_at;
    private Date modified_at;
}

我的feign客户端界面是这样的:

@FeignClient(name = "CerberusClient", url = "${service.cerberus.url}")
public interface CerberusClient {

    @RequestMapping(value = "/providers/", method = RequestMethod.GET, produces = "application/json")
    List<Providers> getAllProviders();
}

我的休息控制器是这样的:

@RestController
@RequestMapping("/cerberus/")
public class CerberusProvidersImpl {

    @Autowired
    private CerberusClient cerberusClient;

    @RequestMapping(value = "/getAllProviders", method = RequestMethod.GET, produces = "application/json")
    public List<Providers> getAllProviders() {
        return cerberusClient.getAllProviders();
    }
}

但是当我调用程序的 Rest API 时,它会产生如下结果:

status": 500,
"error": "Internal Server Error",
"message": "Error while extracting response for type[java.util.List<com.infrastructure.nemesis.feign.model.cerberus.Providers>] and content type [application/json]; 
nested exception is org.springframework.http.converter.HttpMessageNotReadableException: JSON 
parse error: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token; nested exception is 
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token\n at [Source: (PushbackInputStream); line: 1, column: 1]",

我的 FeignClient 中必须有东西来链接模型并读取“数据”值,这样它才能适合模型。这种情况我应该使用什么方法?

【问题讨论】:

  • 您的 JSON 与您的 POJO 不匹配...您的 JSON 开头表示成功,也是一个数据数组..
  • 那么,我应该更改 API 响应以匹配我的 POJO 吗?
  • 尝试更改并告诉我

标签: java spring spring-boot spring-cloud-feign


【解决方案1】:

请尝试包括以下更改

@FeignClient(name = "CerberusClient", url = "${service.cerberus.url}")
public interface CerberusClient {

    @RequestMapping(value = "/providers/", method = RequestMethod.GET, produces = "application/json")
    List < Object > getAllProviders();

    @RequestMapping(value = "/providers/", method = RequestMethod.GET, produces = "application/json")
    Object getAllProviders();    
}

其中一个应该可以工作

【讨论】:

    猜你喜欢
    • 2017-07-23
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    相关资源
    最近更新 更多