package cn.com.szzt.reduce.service.netty.httpClient;
import cn.com.szzt.reduce.util.StringUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.codec.http.*;
import org.springframework.web.context.request.async.DeferredResult;
import java.net.URI;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import static cn.com.szzt.reduce.service.listener.StaticSingleton.queue;
/**
* Created by Vincent.Yang on 2017/5/4.
*/
public class NettyHttpClientInboundHandler extends ChannelInboundHandlerAdapter {
private StringBuffer sb = new StringBuffer();
private DeferredResult<Object> result;
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if (msg instanceof HttpContent) {
HttpContent content = (HttpContent) msg;
ByteBuf buf = content.content();
sb.append(buf.toString(io.netty.util.CharsetUtil.UTF_8));
buf.release();
if(content instanceof LastHttpContent){
result.setResult(sb.toString());
ctx.close();
}
}
}
public void channelActive(ChannelHandlerContext ctx) throws Exception {
Map<String,Object> map = queue.poll(30000, TimeUnit.MICROSECONDS);
this.result = (DeferredResult<Object>)map.get("result");
String para = StringUtil.getNotNullStr(map.get("para"));
String httpMethod = StringUtil.getNotNullStr(map.get("httpMethod"));
URI uri = new URI((String)map.get("url"));// new URI("http://www.cnblogs.com/luxiaoxun/p/3959450.html");
DefaultFullHttpRequest request ;
if(httpMethod.equals("POST")){
request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.POST,uri.getRawPath(), Unpooled.wrappedBuffer(para.getBytes("UTF-8")));
}else {
request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET,uri.getRawPath()+"?para="+para);
}
// 构建http请求
request.headers().set(HttpHeaders.Names.HOST, map.get("host"));
request.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
request.headers().set(HttpHeaders.Names.CONTENT_LENGTH, request.content().readableBytes());
// 发送http请求
ctx.channel().write(request);
ctx.channel().flush();
}
}
网上说都是要加泛型,哪位帮我看看还有哪里需要加上泛型的啊
Object强转DeferredResult<Object>有类型安全问题
如果确定正确可以使用加上@SuppressWarnings("unchecked")