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
春文档