将ParameterizedTypeReference用于HttpRequestExecutingMessageHandler的setExpectedResponseType

时间:2015-08-26 23:14:03

标签: java spring generics spring-integration

我尝试使用def add_self_and_children [self, children.order(:name).map{|c| c.add_self_and_children}].flatten end 配置网关。我面临的问题是@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_original_); getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } 到泛型类型。

我直接使用HttpRequestExecutingMessageHandler时找到了一些解决方案,但在通过setExpectedResponseType处理配置时,我无法调用RestTemplate接收HttpRequestExecutingMessageHandler的{​​{1}}方法。

这是示例代码:

我的通用课程:

exchange

我对HttpRequestExecutingMessageHandler的配置:

RestTemplate

这是我尝试过的其中一个场景,另一个是这样做的:

ParameterizedTypeReference

但没有工作。

调试HttpRequestExecutingMessageHandler,我注意到当它试图确定期望的类型时,返回类型是: public class ListWrapperModel<T> { public ListWrapperModel() {} private List<T> list; }

我是java新手,但我会假设 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; 是创建的匿名类型。

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

谢谢!

1 个答案:

答案 0 :(得分:4)

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

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

稍后会将值表达式计算为提供的ParameterizedTypeReference,基础RestTemplate将用于转换结果。