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



Service作为json . jsonobject返回响应。服务B用虚拟客户端呼叫服务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异常。但是在Service A的日志中,它返回了正确的JSON,比如{" A ":1}。如何处理这个值?最终目标是从虚拟客户端读取响应,并使用Jayway JsonPath获取值。

提前感谢!

Spring引导默认使用jackson序列化-反序列化。由于返回的对象类型为gson,因此添加下面的属性可以接收类型为:JsonObject的正确响应。

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

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

相反,在虚拟客户端将返回类型标记为Object,并在服务层使用Gson()帮助的类型转换。

好的属性是:

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

春文档