java后台开发传输乱码&&接口post传参失败
起因:
前几天遇到的问题,才有时间记录,需求:本地生成xml形式的字符串以参数形式用post方法传送到对方的固定接口;
这个需求写的时候感觉很容易,本地测试的时候,也觉得很简单就过了,然后和对方联调的时候,稀里哗啦调了N久,
中间对方换了人接手,稀里哗啦又调了N久,对方改代码,稀里哗啦又又调了N久,最后上线了,发现接口对不上,,,

经过:
问题最开始只是乱码问题,无非就是UTF-8和GBK之间的转换,我们这边统一的UTF-8的编码,对方是GBK。对面改为
了UTF-8,联调以正确结束;然后对面换人改代码,说要GBK的,我们发了UTF-8的,他们能解析,然后说头部编码格式
要改为GBK,好奇他们居然可以解析的情况下,应要求做出了一个挺low的决定,替换字符串,将UTF-8换为GBK。【其实
这的时候就有点歪了,以至于后面调的比较吃力,当时应该和对方反复确认一下的】。说是没问题,那就上线了,,,,
然后13call,说乱码又出现了,,,
前辈们得知有问题后,第一时间支援,开始分析,才发现,最开始的测试是错的,我用eclipse启动tomcat服务器,这时候用
的是eclipse的编码模式,应该生成war包放在tomcat下启动才能模拟真实的环境,然后我们在不修改环境的情况下各种尝试
编码转换,然后对方说收到了不是乱码的数据,天真的我以为就可以收尾了

对方马上提出,收不到参数的那个字段,这里面用的HttpClient的post方法发送,如下↓
CloseableHttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost("URL");
List<NameValuePair> formparams = new ArrayList<NameValuePair>();
formparams.add(参数);
UrlEncodedFormEntity uefEntity;
uefEntity = new UrlEncodedFormEntity(formparams, "GBK");
post.setEntity(uefEntity);
HttpResponse response2 = client.execute(post);
debug的时候post之前,参数都是有值的,一到post就为null了,浓浓的诡异感飘然而起,前辈当机立断,换方法
我们换用了HttpURLConnection方法,如下↓
URL postUrl = new URL(URL);
HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.connect();
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
String content = "参数=" + URLEncoder.encode(参数, "GBK");
out.writeBytes(content);
收尾了。。。。。
总结:
前辈说,HttpURLConnection是基本的方法,HttpClient是基于HttpURLConnection的封装,基于“简单的问题用
复杂的方法,复杂的的问题用简单的方法”原理,我们回归原始,,,,
为前辈的机智点赞,记住--生成war包放在tomcat下启动来模拟真实的环境,好奇为什么定接口的时候不用json,以后
我商讨的方案,力争用json,后期好保养,
java后台开发传输乱码&&接口post传参失败的更多相关文章
- 【分享】Java后台开发精选知识图谱
地址 引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开始就对整个学习路线有宏观.简洁的认识,确定大的学习 ...
- Java后台开发精选知识图谱
1.引言: 学习一个新的技术时,其实不在于跟着某个教程敲出了几行.几百行代码,这样你最多只能知其然而不知其所以然,进步缓慢且深度有限,最重要的是一开始就对整个学习路线有宏观.简洁的认识,确定大的学习方 ...
- # & 等特殊字符会导致传参失败
# & 等特殊字符会导致 post 传参失败 处理方法使用 encodeURIComponent 将字符串转化一下 实例 // toUpperCase() 转化为大写字母 var cateco ...
- 携程Java后台开发三面面经
前言 携程是我面试的第一个互联网公司,投递的岗位是后台开发实习生,总共面了三面,止步于人才库.中间兜兜转转,复杂的心理活动,不足与外人道也.唯有面试的技术部分与大家共享. 宣讲会完了之后有个手写代码的 ...
- 前端nginx+Java后台ftp处理页面图片上传踩坑
今天,将前端代码部署到服务器nginx上,在测试多图片上传时,报错413请求体空间太大,请求都没到后台,直接被nginx拦截,调整后又报错504. 整体而言,前端存在两处问题: 413 错误 :Req ...
- encodeURIComponent编码java后台解码出现乱码问题
问题:JavaScript请求后台带着name参数,有中文进行编码:url?name=" + encodeURIComponent(name):java后台直接使用name或者name=ja ...
- java与js交互,相互调用传参
随着前端技术的发展与H5的广泛使用,移动端采用native+h5的方式越来越多了,对于Android来说就涉及到java与js的交互,相互调用传参等.下面就来看一下java与js交互的简单demo. ...
- Java中的new关键字和引用传参
先看看Java中如何使用new关键字创建一个对象的. [java] view plain copy public class Student { public String name; public ...
- js 调用接口并传参
注:需先引入 jquery.json-xx.min.js 1. 参数跟在url后面 var name = '王一'; var age = 18; $.ajax({ type : 'get', url ...
随机推荐
- "A transport-level error has occurred when sending the request to the server"的解决办法
http://blog.csdn.net/luckeryin/article/details/4337457 最近在做项目时,遇到一个随机发生的异常:"A transport-level e ...
- 服务器间打通ssh无密钥
1 打通无密钥 配置HDFS,首先就得把机器之间的无密钥配置上.我们这里为了方便,把机器之间的双向无密钥都配置上. (1)产生RSA密钥信息 ssh-keygen -t rsa 一路回车,直到产生一个 ...
- 浅谈OpenGL变换矩阵
OpenGL中使用的矩阵全为列向量为主的矩阵. 参考OpenGL变换网站为 http://www.songho.ca/opengl/gl_transform.html 1.什么是GL_MODELVI ...
- HTTP的GET/POST细节
HTTP的GET/POST方式有何区别?这是一个老生常谈的问题,但老生常谈的问题往往有一些让人误解的结论.本文将带您浅尝HTTP协议,在了 解HTTP协议的同时将会展示许多被人们忽视的内容.在掌握了H ...
- C# WinForm 单例模式(例:同一个窗体只创建一次实例)
//C# WinForm 单例模式(例:同一个窗体只创建一次实例) //打开窗体的事件: Form3 f = Form3.InstanceObject() ; //实例化窗体 f.Focus(); / ...
- php函数的引用返回
<?php function &test(){ static $b = 1; $b += 2; return $b; } $a = &test(); $a =8; $c = te ...
- kettle转换提高性能拆分转换步骤_20161201
今天是12月1号,前期用kettle做了月报自动报表的转换和作业,今天运行时候发现一个报表的程序跑起来失败,心里很纳闷,上过月刚跑的没问题,怎么会无缘无故的失败. 通过看kettle运行日志,发现一个 ...
- RegExp 对象的三个方法:compile()、exec()、test()
这三个都是RegExp对象下的三个方法,使用方法是一致得. 使用方法:RegExpObject.方法() 方法解析:其实就是根据定义好的正则对象,调用对应的方法. 1.RegExpObject.com ...
- 基于PHP生成静态页的实现方法
t1.php 复制代码 代码如下: <?php// 方法一根据模版生成静态页面// replaceTemplateString函数用于替换模板中指定字符串function replaceTemp ...
- framebuffer应用编程实践
framebuffer的使用主要包括4个部分: (1):首先需要打开设备文件 /dev/fb0. (2):获取设备的信息.包括可变信息和不可变信息,分别使用两个结构体来进行封装,这两个结构体在 < ...