天天看點

com.ning.http.client 替換

一背景

 在引用一個公用的登入jar,發現是給老的springmvc用的。配置filter那種方式,改為springboot之後。不好使。

Caused by: java.lang.NoSuchMethodError: org.jboss.netty.handler.codec.http.HttpRequest.headers()Lorg/jboss/netty/handler/codec/http/HttpHeaders;
	at com.ning.http.client.providers.netty.request.NettyRequestFactory.newNettyRequest(NettyRequestFactory.java:178) ~[async-http-client-1.9.38.jar:na]
	at com.ning.http.client.providers.netty.request.NettyRequestSender.newNettyRequestAndResponseFuture(NettyRequestSender.java:181) ~[async-http-client-1.9.38.jar:na]
	at com.ning.http.client.providers.netty.request.NettyRequestSender.sendRequestWithCertainForceConnect(NettyRequestSender.java:135) ~[async-http-client-1.9.38.jar:na]
	at com.ning.http.client.providers.netty.request.NettyRequestSender.sendRequest(NettyRequestSender.java:117) ~[async-http-client-1.9.38.jar:na]
	at com.ning.http.client.providers.netty.NettyAsyncHttpProvider.execute(NettyAsyncHttpProvider.java:87) ~[async-http-client-1.9.38.jar:na]
           

檢視了下pom.

目前引用為:

<dependency>

    <groupId>com.ning</groupId>

    <artifactId>async-http-client</artifactId>

    <version>1.9.38</version>

</dependency>

這個是2016年的,比較老了,而且最新的也是2016年的,已經沒人維護了

com.ning.http.client 替換

嘗試pom排除掉,引用1.9.40版本,還是報錯。

算了,徹底放棄:改為asynchttpclient

pom.xml引用如下:

<dependency>

    <groupId>org.asynchttpclient</groupId>

    <artifactId>async-http-client</artifactId>

    <version>2.12.1</version>

</dependency>

之前方法的使用了是guava的異步配合接口。

這種:

HttpListenableFuture<Response> future = HttpListenableFuture.wrap(client.executeRequest(builder.build()));
        return Futures.transform(future, new Function<Response, String[]>() {
           

新的API:異步GET請求

ListenableFuture<Response> future =
client.prepareGet( "url" ).execute( new AsyncCompletionHandler<Response>() {
 
    @Override
    public Response onCompleted( Response response ) throws Exception {
        String resp = response.getResponseBody();
        return response;
    }
 
    @Override
    public void onThrowable( Throwable t ) {
        // Something wrong happened.
    }
} );
           

異步post就不貼了。

類似的還有:

BoundRequestBuilder、addQueryParam  很多方法都要替換。      

方法比較多,替換了一上午,再嘗試發新的client包。替換。OK了。

繼續閱讀