我自己的上一个博客账号已注销,把文章搬到这个号上!
首先来看我的请求代码
 /**
     * 接口调用,环信创建群组
     */
    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是以字符的方式输出。 
 类似字节流与字符流的差别
                  
                  
                  
                  
本文详细记录了一位开发者在使用环信IM API创建群组时遇到的400错误问题,特别是关于token验证失败的困扰。通过对比测试,发现使用PrintWriter替换DataOutputStream解决了中文参数传递的问题。
          
      
          
                
                
                
                
              
                
                
                
                
                
              
                
                
              
            
                  
					701
					
被折叠的  条评论
		 为什么被折叠?
		 
		 
		
    
  
    
  
            


            