java - 使用 ParameterizedTypeReference 为 HttpRequestExecutingMessageHandler 设置 ExpectedResponseType

标签 java spring generics spring-integration

我正在尝试使用 HttpRequestExecutingMessageHandler 配置网关。我面临的问题是将 setExpectedResponseType 设置为通用类型。

当你直接使用 RestTemplate 时,我找到了一些解决方案,但是当通过 HttpRequestExecutingMessageHandler 处理配置时,我无法让它调用正确的方法RestTemplateexchange 方法接收 ParameterizedTypeReference

这是示例代码:

我的通用类:

   public class ListWrapperModel<T> {

   public ListWrapperModel() {}
   private List<T> list;
}

我对 HttpRequestExecutingMessageHandler 的配置:

    Map<String, Expression> uriVariableExp = getDefaultEndpointProperties();
    SpelExpressionParser parser = new SpelExpressionParser();
    uriVariableExp.put("id", parser.parseExpression("payload"));

    String endpoint = "{host}/models?id={id}";
    HttpRequestExecutingMessageHandler gateway;

    gateway = new HttpRequestExecutingMessageHandler(endpoint, getRestTemplate());
    gateway.setRequiresReply(true);
    gateway.setHttpMethod(HttpMethod.GET);
    gateway.setExpectedResponseType(new ParameterizedTypeReference<ListWrapperModel<Model>>(){}.getClass());
    gateway.setUriVariableExpressions(uriVariableExp);

    return gateway;

这是我尝试过的一种方案,另一种方案是这样做的:

gateway.setExpectedResponseType(new ParameterizedTypeReference<ListWrapperModel<Model>>(){}.getType().getClass());

但是没用。

调试 HttpRequestExecutingMessageHandler,我注意到当它试图确定预期类型时,返回类型是:com.host.app.service.gateway.http.ServiceConfiguration$1

我是 java 的新手,但我假设 $1 是创建的匿名类型。

请问有没有什么办法可以配置这样才能正常工作。

谢谢!

最佳答案

我设法通过使用响应类型值表达式解决了这个问题。以下设置对我有用:

ParameterizedTypeReference<ListWrapperModel<Model>> type = new ParameterizedTypeReference<ListWrapperModel<Model>>() { };
gateway.setExpectedResponseTypeExpression(new ValueExpression<>(type));

值表达式稍后将被评估为提供的 ParameterizedTypeReference,底层 RestTemplate 将使用它来转换结果。

关于java - 使用 ParameterizedTypeReference 为 HttpRequestExecutingMessageHandler 设置 ExpectedResponseType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32238183/

相关文章:

c# - 对 List<T> 的每个项目执行自定义操作

java - 在java中使用单字符泛型类型名称的原因是什么?

java - 防止表单生成的 SQL 注入(inject) SQL - NO PreparedStmts

java - Android Jsonarray无法转换为json对象

java - 如何捕获 org.springframework.dao.DataIntegrityViolationException : Could not execute JDBC batch update

Delphi 多索引通用列表

java - 如何更改页面源代码?使用 Selenium 和java

java - 找不到 Firebase Cloud Firestore 的 .runtransaction() 等效项

java - 如何使用spring框架将一个bean复制到另一个bean

html - 我的 PUT 方法即使在 Spring 有效,也无法正常工作