记录一次java集成环信IM中的创建群组请求回来一直是400的问题

我自己的上一个博客账号已注销,把文章搬到这个号上!

首先来看我的请求代码

 /**
     * 接口调用,环信创建群组
     */
    public static String httpURLGroup(RegGroup group, String POST_URL, String token) {
        String war = "";
        try {
            URL url = new URL(POST_URL);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST");
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);
            connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
            connection.setRequestProperty("Authorization", token);
            connection.connect();
            DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
            JSONObject obj = JSONObject.fromObject(group);
            // 将参数输出到连接
            dataout.writeBytes(obj + "");
            // 输出完成后刷新并关闭流
            dataout.flush();
            dataout.close();
            // TODO Auto-generated catch block
            // 重要且易忽略步骤 (关闭流,切记!)
            // 连接发起请求,处理服务器响应  (从连接获取到输入流并包装为bufferedReader)
            BufferedReader bf = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            StringBuilder sb = new StringBuilder(); // 用来存储响应数据
            while ((line = bf.readLine()) != null) {
                line = new String(line.getBytes(), "utf-8");
                sb.append(line);
            }
            bf.close();    // 重要且易忽略步骤 (关闭流,切记!)
            connection.disconnect(); // 销毁连接
            //System.out.println(sb.toString());
            war = sb.toString();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return war;
    }

这就是出错时的请求,请求环信IM创建社团时,一直请求回来400,然后看他的那个错误信息,说是token无效,fuc*,我的token用在用户体系中的创建用户和修改密码都可用,在这你给我说token无效。然后就去官网找了,在他的官网有一个在线验证的地方

地址:http://api-docs.easemob.com/#/

然后我把我的token和参数什么都放上去请求成功!!!!!!!!!!!!!!!!!!!!!!!

重点来了

 我再创建输出流往连接里面输出携带的参数时用的是  DataOutputStream  然后我用英文和数字来请求的话就可以成功,用中文的话就会一直400.这个问题搞了我2个小时。。。。。。。

解决办法:

把 DataOutputStream  流换成 PrintWriter  ,将参数输出到连接用 PrintWriter.write();

具体他们两个的区别还请往下看: -》这个区别的博主连接https://blog.csdn.net/feipeng8848/article/details/56286399 

1.OutputStream

使用步骤:

获取输出流
设置中文
将字符串转换成字节数组
调用outputStream.write()
这里只贴出doGet方法的内容:

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取OutputStream输出流
        OutputStream outputStream = response.getOutputStream();
        //设置中文
         response.setHeader("content-type", "text/html;charset=UTF-8");
         String data = "你好,这里是通过OutputStream的方式向网页输出内容";
        //将字符转换成字节数组,并且指定UTF-8编码
         byte[] dataByteArr = data.getBytes("UTF-8");
        //  输出
         outputStream.write(dataByteArr);
    }

2.PrintWriter

使用步骤:

设置文档类型和编码方式
获取getWriter()
输出
也是只贴出doGet方法的内容:

// 设置响应内容类型与编码方式
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("你好,这里是通过PrintWriter的方式向网页输出内容");

3.总结

OutputStream是以字节的方式输出,PrintWriter是以字符的方式输出。 
类似字节流与字符流的差别

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值