背景
在项目中需要调用 小程序开发提供的http api,在web端将数据写入小程序的云数据库,但是代码单元测试在idea上没问题。正常写入。但是将项目部署在tomcat上面发现写入数据失败,错误码 47001,即请求体解析失败,请求体的格式出错,于是怀疑是编码导致的问题
尝试过的方法
PrintWriter out=new PrintWriter(connection.getOutputStream());
JSONObject jsonObject=new JSONObject();
jsonObject.put("env",yunId);
jsonObject.put("query",query);
//神奇操作
String s=new String(jsonObject.toJSONString().getBytes("UTF-8"));
out.write(s);
connection.setRequestProperty("Accept-Charset","UTF-8");
connection.setRequestProperty("Content-Type","application/json;charset=UTF-8");
和无数次的运行,运行,运行。。。。。。。
最终寻找解决办法的过程中无意看到 tomcat 指定 jvm的编码格式。豁然开朗,具体方法如下
-
首先 在你的运行环境下查看你的 jvm编码格式
System.getProperty("file.encoding")
-
根据实际项目的需要,修改catalina.bat文件配置
加入 :set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
注意你加入的位置:
goto doneEndorsed
:noEndorsedVar
if not exist "%CATALINA_HOME%\endorsed" goto doneEndorsed
set ENDORSED_PROP=java.endorsed.dirs
:doneEndorsed
set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding=UTF-8
rem ----- Execute The Requested Command ---------------------------------------