[英]Generic response support for feign client
我正在使用 Feign 编写 REST 客户端。 有一个端点可以通过参数化路径来概括。 但是根据路径,我可以获得不同类型的响应。
所以我试图使用通用的单一方法。 由于我必须在返回类型上告诉方法,因此我正在参数化返回值的类型,如下所示,
@RequestLine("GET /objects/{type}/{model_id}")
public <T> Entity<T> getObject(
@Param("type") String theObjectType, @Param("model_id") String theModelId,
Class<T> theResponseClass);
但问题是,Feign 会使用theResponseClass
作为主体。 如何实现通用的假客户端方法?
你可以只使用 Feigns 的通用响应类型。 遗憾的是,它不是类型安全的,需要将主体作为 inputStream 或 byte[] 返回。
像这样:
@RequestLine("GET /objects/{type}/{model_id}")
public Response getMyData(@Param("model_id") String theModelId)
{
return Response.Builder.body(response).build();
}
当谈到通用响应时,总是很难让 Feign 返回通用响应,你唯一的选择是定义字符串响应,然后用 mapstruct 映射它:
@RequestLine("GET /objects/{type}/{model_id}")
String getObject(@Param("type") String theObjectType, @Param("model_id") String theModelId);
然后在实用程序类中定义,如:
public final class JsonUtils {
private JsonUtils() {
}
@SneakyThrows
public static <T> T jsonToObject(final String jsonString, final Class<T> clazz) {
final ObjectMapper objectMapper = buildObjectMapper();
return objectMapper.readValue(jsonString, clazz);
}
public static ObjectMapper buildObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
objectMapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false);
objectMapper.registerModule(new ParameterNamesModule());
objectMapper.registerModule(new Jdk8Module());
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.