一背景
在引用一個公用的登入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年的,已經沒人維護了
嘗試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了。