簡體   English   中英

將HttpRequestExecutingMessageHandler的ExpectedResponseType設置為Page

[英]Set the HttpRequestExecutingMessageHandler's expectedResponseType to a Page

我正在使用MessagingGateway執行對另一個服務的HTTP調用。 該端點返回數據切片(使用分頁),問題在於返回的結果的類型為Page (接口)。 我知道該接口的實現是PageImpl類型的類,但是問題是當我嘗試反序列化該類時,該類沒有任何默認構造函數,因此它失敗。 我可以創建一個包含所需屬性的POJO,它將解決問題,但是我想知道是否有任何彈簧技巧可以使我以更好的方式解決此問題。

這是我的消息網關配置的示例:

    Map<String, Expression> uriVariableExp = getDefaultEndpointProperties(host, apiKey);
    SpelExpressionParser parser = new SpelExpressionParser();

    uriVariableExp.put("parameter1", parser.parseExpression("payload.parameter1"));
    String endpoint =
            "{host}/resource?parameter1={parameter1}";

    HttpRequestExecutingMessageHandler gateway = new HttpRequestExecutingMessageHandler(endpoint, getRestTemplate());
    gateway.setRequiresReply(true);
    gateway.setHttpMethod(HttpMethod.GET);
    ParameterizedTypeReference<Page<ResourceModel>> typeReference = new ParameterizedTypeReference<Page<ResourceModel>>(){};
    gateway.setExpectedResponseTypeExpression(new ValueExpression<>(typeReference));
    gateway.setUriVariableExpressions(uriVariableExp);
    return gateway;

如您所見,expectedResponseType是我的問題,我嘗試使用PageImpl但這會引發未找到構造函數的錯誤。

不,沒有這樣的內置技巧。 更糟糕的是:您的客戶端HttpRequestExecutingMessageHandler必須不了解服務器的模型,並且其類路徑中不得包含任何Spring Data jar。 從高處來看,REST服務不應將這樣的模型返回到響應中。 不僅您的應用程序可能是該客戶端。

因為您已經遇到了這樣的問題,否則您別無選擇,除非引入一些VO POJO以便能夠正確地反序列化Page ,或者實現您自己的HttpMessageConverter來具有一個鈎子來實例化Spring Data所需的PageImpl

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM