繁体   English   中英

对假客户端的通用响应支持

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM