gpt4 book ai didi

java - 使用 ParameterizedTypeReference 为 HttpRequestExecutingMessageHandler 设置 ExpectedResponseType

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:32 24 4
gpt4 key购买 nike

我正在尝试使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com