【发布时间】: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