起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: bxj975

[结贴] 接口调用json数据乱码问题

[复制链接]

25

主题

105

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
QQ
 楼主| 发表于 2018-3-1 15:53:40 | 显示全部楼层
本帖最后由 bxj975 于 2018-3-1 17:46 编辑

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;

import com.alibaba.fastjson.JSONArray;
//import net.sf.json.JSONArray;
//import net.sf.json.JSONObject;
import com.alibaba.fastjson.JSONObject;
import com.justep.baas.action.ActionContext;

public class FetchExpend {

        /**
         * @param args
         */

        public static void main(String[] args) {
                // TODO 自动生成的方法存根
                try {
                        FetchExpend restUtil = new FetchExpend();
                        SqlExpend sqlexpend = new SqlExpend();
                        String resultString = restUtil.load("http://****:92/api/logistics/finance/getOrdersFeeRecord", "beginDate=2018-01-20&endDate=2018-01-21");
                        JSONObject jsonObject = JSONObject.parseObject(resultString);
                        String resp = jsonObject.getString("resp");
                        JSONObject json = JSONObject.parseObject(resp);
                        JSONArray photoArray = json.getJSONArray("rows");
                        System.out.print(photoArray.size());
                        for (int i = 0; i < photoArray.size(); i++) {
                                JSONObject object = (JSONObject) photoArray.get(i);
                                Expenditure expend = new Expenditure();
                                expend.setOrderCode(object.getString("orderCode"));
                                expend.setFee_name(object.getString("fee_name"));
                                expend.setFee(object.getDouble("fee"));
                                // expend.setCreate_time(sqlexpend.convert(object.getString("create_time")));
                                expend.setCreate_time(object.getString("create_time"));
                                expend.setIncome(object.getDouble("income"));
                                expend.setSiteName(object.getString("siteName"));
                                expend.setAddress(object.getString("address"));
                                // System.out.print(expend.getAddress());

                                int result = sqlexpend.insert(expend);
                                System.out.print(result);
                        }
                } catch (Exception e) {

                        // TODO: handle exception

                        System.out.print(e.getMessage());

                }

        }

        private static JSONObject ret = new JSONObject();

        public static JSONObject fetchExp(JSONObject params, ActionContext context) throws Exception {
//                前后端调用传参的时候,js对中文字符串的编码处理:
//                var name = encodeURI(‘内容’);
//                java接收参数以后,转码为utf-8
//                URLEncoder.encode(request.getParameter(“name”),”utf-8″);
                String dateBegin = URLEncoder.encode(params.getString("dateB"),"utf-8");
                String dateEnd = URLEncoder.encode(params.getString("dateE"),"utf-8");
                // System.out.print(dateBegin,dateEnd);
                int num = 0;
                FetchExpend restUtil = new FetchExpend();
                SqlExpend sqlexpend = new SqlExpend();
                String resultString = restUtil.load("http://****:92/api/logistics/finance/getOrdersFeeRecord", "beginDate=2018-01-20&endDate=2018-01-21");//"beginDate=" + dateBegin + "&endDate=" + dateEnd);
                System.out.print(resultString);
                JSONObject jsonObject = JSONObject.parseObject(resultString);
                String resp = jsonObject.getString("resp");
                JSONObject json = JSONObject.parseObject(resp);
                JSONArray photoArray = json.getJSONArray("rows");
                System.out.print(photoArray.size());
                for (int i = 0; i < photoArray.size(); i++) {
                        JSONObject object = (JSONObject) photoArray.get(i);
                        Expenditure expend = new Expenditure();
                        expend.setOrderCode(object.getString("orderCode"));
                        expend.setFee_name(object.getString("fee_name"));
                        expend.setFee(object.getDouble("fee"));
                        // expend.setCreate_time(sqlexpend.convert(object.getString("create_time")));
                        expend.setCreate_time(object.getString("create_time"));
                        expend.setIncome(object.getDouble("income"));
                        expend.setSiteName(object.getString("siteName"));
                        expend.setAddress(object.getString("address"));

                        int result = sqlexpend.insert(expend);
                        System.out.print(object.getString("siteName"));
                        num += result;
                }
                ret.put("result", num); // String.valueOf(n));
                return ret;
        }

        public String load(String url, String query) throws Exception {
                URL restURL = new URL(url);
                /*
                 * 此处的urlConnection对象实际上是根据URL的请求协议(此处是http)生成的URLConnection类
                 * 的子类HttpURLConnection
                 */
                HttpURLConnection conn = (HttpURLConnection) restURL.openConnection();
                // 请求方式
                conn.setRequestMethod("POST");
                // 设置是否从httpUrlConnection读入,默认情况下是true;
                // httpUrlConnection.setDoInput(true);
                conn.setDoOutput(true);
                // allowUserInteraction 如果为 true,则在允许用户交互(例如弹出一个验证对话框)的上下文中对此 URL 进行检查。
                conn.setAllowUserInteraction(false);

                PrintStream ps = new PrintStream(conn.getOutputStream());
                ps.print(query);

                ps.close();

                BufferedReader bReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

                String line, resultStr = "";

                while (null != (line = bReader.readLine())) {
                        resultStr += line;
                }
                // System.out.println("3412412---" + resultStr);
                bReader.close();
                // System.out.println(resultStr);
                return resultStr;

        }

}
回复 支持 反对

使用道具 举报

851

主题

2560

帖子

5714

积分

论坛元老

Rank: 8Rank: 8

积分
5714
QQ
发表于 2018-3-1 16:42:48 | 显示全部楼层
你现在是通过 restUtil.load接口拿数据的时候出了问题,也就是接口调用是可以指定返回字符编码的。
你再研究一下这个方法 ,应该在这里能找到突破点。
企业应用定制开发。X5开发者。
手机:15065117236
QQ:87356667
回复 支持 反对

使用道具 举报

25

主题

105

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
QQ
 楼主| 发表于 2018-3-1 16:49:34 | 显示全部楼层
wgs7909 发表于 2018-3-1 16:42
你现在是通过 restUtil.load接口拿数据的时候出了问题,也就是接口调用是可以指定返回字符编码的。
你再研 ...

在main方法里 没问题啊
回复 支持 反对

使用道具 举报

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
发表于 2018-3-1 17:08:46 | 显示全部楼层
本帖最后由 我是小菜鸡 于 2018-3-1 17:19 编辑

试一下:
  1. PrintStream ps = new PrintStream(conn.getOutputStream());
  2. ps.print(query.getBytes("UTF-8"));

  3. ps.close();

  4. BufferedReader bReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
复制代码
回复 支持 反对

使用道具 举报

65

主题

315

帖子

851

积分

高级会员

Rank: 4

积分
851
发表于 2018-3-1 17:11:39 | 显示全部楼层
网络服务请求可以使用Wireshark软件查看发送的报文信息,你可以用Wireshark比较一下main和fetchExp中两次请求发送的报文,找到报文有什么不一样,再找解决方法
回复 支持 反对

使用道具 举报

25

主题

105

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
QQ
 楼主| 发表于 2018-3-1 17:23:14 | 显示全部楼层
我是小菜鸡 发表于 2018-3-1 17:11
网络服务请求可以使用Wireshark软件查看发送的报文信息,你可以用Wireshark比较一下main和fetchExp中两次请 ...

非常感谢
回复 支持 反对

使用道具 举报

25

主题

105

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
QQ
 楼主| 发表于 2018-3-1 17:44:49 | 显示全部楼层
本帖最后由 bxj975 于 2018-3-1 17:46 编辑

BufferedReader bReader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
按照你的代码解决了  谢谢!

回复 支持 反对

使用道具 举报

25

主题

105

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
QQ
 楼主| 发表于 2018-3-1 17:46:58 | 显示全部楼层
请结贴吧!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-5 18:31 , Processed in 0.124295 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表