![](/img/trans.png)
[英]Testing HttpRequestExecutingMessageHandler using MockRestServiceServer
[英]Using ParameterizedTypeReference to setExpectedResponseType for HttpRequestExecutingMessageHandler
我正在尝试使用HttpRequestExecutingMessageHandler
配置网关。 我面临的问题是将setExpectedResponseType
设置为泛型类型。
我直接使用RestTemplate
时找到了一些解决方案,但是当通过HttpRequestExecutingMessageHandler
处理配置时,我无法调用接收ParameterizedTypeReference
的RestTemplate
的正确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.