RayTigerZ commented on issue #3539:
URL: 
https://github.com/apache/servicecomb-java-chassis/issues/3539#issuecomment-1364489356

   DefaultHttpClientFilter这段代码完成类型的确认和转化
   ```
   JavaType responseType = invocation.findResponseType(responseEx.getStatus());
   result = produceProcessor.decodeResponse(responseEx.getBodyBuffer(), 
responseType);
   Response response = Response.create(responseEx.getStatusType(), result);
   ```
   CseClientHttpRequest没有进行类型的转化,包装一下就完了
   ```
   private CseClientHttpResponse invoke(Map<String, Object> swaggerArguments) {
       Invocation invocation = prepareInvocation(swaggerArguments);
       Response response = doInvoke(invocation);
   
       if (response.isSucceed()) {
         return new CseClientHttpResponse(response);
       }
   
       throw ExceptionFactory.convertConsumerException(response.getResult());
     }
   ```
   CseHttpMessageConverterExtractor拆取时也没有类型转换
   ```
   public class CseHttpMessageConverterExtractor<T> implements 
ResponseExtractor<T> {
     @Override
     @SuppressWarnings("unchecked")
     public T extractData(ClientHttpResponse response) throws IOException {
       return (T) ((CseClientHttpResponse) response).getResult();
     }
   }
   ```
   CSERestTemplate继承RestTemplate的方法,也没有进行类型转换
   
   ```
   @Nullable
        protected <T> T doExecute(URI url, @Nullable HttpMethod method, 
@Nullable RequestCallback requestCallback,
                        @Nullable ResponseExtractor<T> responseExtractor) 
throws RestClientException {
   
                Assert.notNull(url, "URI is required");
                Assert.notNull(method, "HttpMethod is required");
                ClientHttpResponse response = null;
                try {
                        ClientHttpRequest request = createRequest(url, method);
                        if (requestCallback != null) {
                                requestCallback.doWithRequest(request);
                        }
                        response = request.execute();
                        handleResponse(url, method, response);
                        return (responseExtractor != null ? 
responseExtractor.extractData(response) : null);
                }
                catch (IOException ex) {
                        String resource = url.toString();
                        String query = url.getRawQuery();
                        resource = (query != null ? resource.substring(0, 
resource.indexOf('?')) : resource);
                        throw new ResourceAccessException("I/O error on " + 
method.name() +
                                        " request for \"" + resource + "\": " + 
ex.getMessage(), ex);
                }
                finally {
                        if (response != null) {
                                response.close();
                        }
                }
        }
   ```
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to