这段代码报警告,说是NettyHttpClientInboundHandler.java使用了未经检查或不 安全的操作。

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();
    }
}

网上说都是要加泛型,哪位帮我看看还有哪里需要加上泛型的啊

阅读 1.9k
1 个回答

Object强转DeferredResult<Object>有类型安全问题
如果确定正确可以使用加上@SuppressWarnings("unchecked")

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题