zoukankan      html  css  js  c++  java
  • json文本协议

    json:对象-字符串-byte[] -传输-byte[]-字符串-对象

    pb:对象-byte[]-传输byte[]-对象

    另一个例子在pb协议 jdk序列化协议,考虑到文章太长,放于此instead of the bottom

    client:

        String wholeUrl = String.format("%s?sdkappid=%d&random=%d", URL, SDKAPPID, rnd);
    
            java.net.URL object = new URL(wholeUrl);
            HttpURLConnection con = (HttpURLConnection) object.openConnection();
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setRequestProperty("Content-Type", "application/json");
            con.setRequestProperty("Accept", "application/json");
            con.setRequestMethod("POST");
            JSONObject data = new JSONObject();
            JSONObject tel = new JSONObject();
            tel.put("nationcode", nationCode);
            String phone = phoneNumber;
            tel.put("phone", phone);
            data.put("type", "0");
            data.put("msg", content);
            String sig = stringMD5(APPKEY.concat(phone));
            data.put("sig", sig);
            data.put("tel", tel);
            OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "utf-8");
            wr.write(data.toString());
            wr.flush();
    
            // 显示 POST 请求返回的内容
            StringBuilder sb = new StringBuilder();
            int HttpResult = con.getResponseCode();
            if (HttpResult == HttpURLConnection.HTTP_OK)
            {
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
                String line;
                while ((line = br.readLine()) != null)
                {
                    sb.append(line + "
    ");
                }
                br.close();
                JSONObject reObj = new JSONObject(sb.toString());
                String res = (String)reObj.get("result");
                if(!"0".equals(res)) {
                    System.out.println("" + sb.toString());
                    LOGGER.error("SmsSender::sendMsg" + "-" + phoneNumber + ","+(String)reObj.get("errmsg"));
                } else {
    
                }
    
    
            } else
            {
                LOGGER.error("send failed and rps is: " + con.getResponseMessage());
                throw new SmsException("send failed and rps is: " + con.getResponseMessage());
            }
    

    请求:

    JSONObject data = new JSONObject();
    OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "utf-8");
    wr.write(data.toString());

    应答:

    BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
    String line;
    while ((line = br.readLine()) != null)
    {
    sb.append(line + " ");
    }
    br.close();
    JSONObject reObj = new JSONObject(sb.toString());
    String res = (String)reObj.get("result");

    server:

    基于netty的http server

    响应请求,读取参数:

    HttpServerHandler
        @Override
        protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception {
    
            // 获取channel中的URI
            Attribute<String> attr = ctx.channel().attr(AttributeMapConstant.NETTY_CHANNEL_KEY_HTTP_REQ_URI);
            String uri = attr.get();
    
            byte[] bs = new byte[msg.readableBytes()];
            msg.readBytes(bs);
            String json = new String(bs);
    
    BaseReq baseReq = JSON.parseObject(json, BaseReq.class);

    返回应答:

    tws:

    HttpServerHandler
        public static void rspTws(RequestIdentity ri, BaseDto dto) {
            String json = JSON.toJSONString(dto);
    
            Channel channel = ri.getClientChannel();
            if (channel != null && channel.isActive()) {
                logger.info("3.返回http客户端:{},流水号:{}", json, ri.getReqId());
    
                channel.writeAndFlush(getJsonBuffer(json))
    

     String json = JSON.toJSONString(dto);

        /**
         * JSON转ByteBuf
         *
         * @param json
         * @return
         */
        private static ByteBuf getJsonBuffer(String json) {
            ByteBuf buffer = Unpooled.buffer();
            buffer.writeBytes(json.getBytes());
            return buffer;
        }
    

     json.getBytes()

    /**
     * HTTP消息体编码器
     * @author shane
     *
     */
    public class HttpBodyEncoder extends MessageToMessageEncoder<ByteBuf> {
    
    	@Override
    	protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
    		out.add(HttpCreateor.buildFullHttpResponse(msg).retain());
    	}
    
    }
    
    	public static FullHttpResponse buildFullHttpResponse(ByteBuf msg) {
    		// 返回信息
    		FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, msg);
    		response.headers().set(HttpHeaderNames.CONTENT_TYPE, String.format("%s;charset=UTF-8", HttpHeaderValues.TEXT_PLAIN));
    		response.headers().set(HttpHeaderNames.CONTENT_LENGTH, response.content().readableBytes());
            // 返回
            return response;
    	}
    

    action:

    public class BodyToResponseEncoder extends MessageToMessageEncoder<ResponseMessage> {
    
        @Override
        protected void encode(ChannelHandlerContext channelHandlerContext, ResponseMessage responseMessage, List<Object> list) throws Exception {
    
            String json = JSON.toJSONString(responseMessage);
    
            FullHttpResponse response = new DefaultFullHttpResponse(
                    HttpVersion.HTTP_1_1,
                    HttpResponseStatus.OK,
                    Unpooled.wrappedBuffer(json.getBytes("utf-8")));
            response.headers().set(HttpHeaders.Names.CONTENT_TYPE, "application/json;charset=UTF-8");
            response.headers().set(HttpHeaders.Names.CONTENT_LENGTH, response.content().readableBytes());
            response.headers().set(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE);
    
            // 下面2个支持跨域
            response.headers().set(HttpHeaders.Names.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
            response.headers().set(HttpHeaders.Names.ACCESS_CONTROL_ALLOW_HEADERS, HttpHeaders.Names.CONTENT_TYPE);
    
            list.add(response);
        }
    }
    

     String json = JSON.toJSONString(responseMessage);

    json.getBytes("utf-8")
  • 相关阅读:
    在像Angular2这样的SPA应用中使用Google Analytics的方法
    英语
    教你打包Java程序,jar转exe随处可跑
    [java]java字符串如何保存到数据库日期类型的列?
    获取主板序列号 cpu序列号,硬盘序列号,MAC地址
    java获取mac地址,ip地址
    java 获取硬件信息
    获取年月日 时分秒
    这是一页纸商业计划书 (Business Plan) 模板。
    javac和java命令的详解
  • 原文地址:https://www.cnblogs.com/silyvin/p/10172445.html
Copyright © 2011-2022 走看看