如何将 Feign 客户端响应作为 JSONObject 处理

How to handle Feign Client response as JSONObject

服务 A 返回响应 gson.JsonObject。从服务 B 使用 Feign Client 调用服务 A。如何处理响应?在下面尝试过:

@FeignClient(name = "ABC")
public interface TestDataProviderApi {
   @GetMapping(value = "/v1/path/{data-type}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    **JsonObject** getData(@PathVariable("data-type") String dataType);
}

@FeignClient(name = "ABC")
public interface TestDataProviderApi {
   @GetMapping(value = "/v1/path/{data-type}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    **Object** getData(@PathVariable("data-type") String dataType);
}

@FeignClient(name = "ABC")
public interface TestDataProviderApi {
   @GetMapping(value = "/v1/path/{data-type}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
    **JSONObject** getData(@PathVariable("data-type") String dataType);
}

没有任何效果。任一响应都打印为 {} 或 JSON 异常。但在服务 A 日志中,它返回了正确的 JSON,如 {"a":1}。如何处理值?最终目标是读取假客户端的响应并使用 Jayway JsonPath 获取值。

提前致谢!

Spring 默认使用jackson序列化-反序列化启动。由于对象 returned 是 gson 类型,在下面添加 属性 可以接收类型为 JsonObject 的正确响应。

spring.http.converters.preferred-json-mapper=gson

但这会影响其他控制器和客户端行为,因为一切都开始期待 gson 对象(无法反序列化 JSONObjects)。

相反,在伪装客户端将 return 类型标记为 Object 并在服务层中使用 Gson() 帮助的类型转换。