繁体   English   中英

将ParameterizedTypeReference用于HttpRequestExecutingMessageHandler的setExpectedResponseType

[英]Using ParameterizedTypeReference to setExpectedResponseType for HttpRequestExecutingMessageHandler

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

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

这是示例代码:

我的通用类:

   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将使用它来转换结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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