【问题标题】:Using ParameterizedTypeReference to setExpectedResponseType for HttpRequestExecutingMessageHandler使用 ParameterizedTypeReference 为 HttpRequestExecutingMessageHandler 设置预期响应类型
【发布时间】:2015-11-21 04:12:21
【问题描述】:

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

当您直接使用RestTemplate 时,我找到了一些解决方案,但是当通过HttpRequestExecutingMessageHandler 处理配置时,我无法使其调用正确的exchange 方法RestTemplate收到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 是创建的匿名类型。

我想问一下是否有办法配置它以便可以正常工作。

谢谢!

【问题讨论】:

    标签: java spring generics spring-integration


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-23
      • 2017-09-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2017-08-08
      相关资源
      最近更新 更多