`
wandejun1012
  • 浏览: 2680155 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

json入参的接口乱码问题解决

    博客分类:
  • java
 
阅读更多

 

需求背景:由于一些接口并没有采用常规的form形式,而是用一个json作为入参,形如{"userName":"zhangsan","password":"123456"}.

这种情况下用restTemplate也行,用httpClient也行,但是restTempalte和httpClient都可能有乱码问题。我这里用最原生的UrlConnection来解决,加上一些头部信息,即可解决乱码,很爽。

 

关键代码:

 

public static void post(String url, String param ) throws Exception{
        String charset = "UTF-8"; 
        URLConnection connection = new URL(url).openConnection();
        connection.setDoOutput(true);  Triggers POST.
        connection.setRequestProperty("Accept-Charset", charset);
        connection.setRequestProperty("Content-Type", "application/json;charset=" + charset);

        try (OutputStream output = connection.getOutputStream()) {
          output.write(param.getBytes(charset));
        }

        InputStream response = connection.getInputStream();
        String result= InputStreamTOString(response, "UTF-8");
        System.out.println("result^_^"+result);
      }

 

 

final static int BUFFER_SIZE = 4096;  
       
     /  

  • 将InputStream转换成某种字符编码的String  
  • @param in  
  • @param encoding  
  • @return  
  • @throws Exception  
             */  
                 public static String InputStreamTOString(InputStream in,String encoding) throws Exception{  
                 
                ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
                byte[] data = new byte[BUFFER_SIZE];  
                int count = -1;  
                while((count = in.read(data,0,BUFFER_SIZE)) != -1)  
                    outStream.write(data, 0, count);  
                 
                data = null;  
                return new String(outStream.toByteArray(),encoding);  
            }  
 
 

具体代码我已经封装在V3架构里面的HttpClientUtil的postWithJson方法中,为了保持统一,本方法强制用UTF-8编码。

只要接受3个参数,具体看源码即可。

 

refurl:http://stackoverflow.com/questions/7181534/http-post-using-json-in-java

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics