Shen_sy 2018-01-29 09:43 采纳率: 0%
浏览 3326
已结题

http post 请求 spring mvc 接收参数为NULL 求大神帮助啊

public static JSONObject requestCdi(String url, Map params) {
log.info("url: {}", url);
log.debug("params: {}", params);

    HttpRequest httpRequest = new HttpRequest(url);
    httpRequest.setRequestCharset(Configure.get("cdiRequestUrl", "requestCharset"));

    if (params != null && !params.isEmpty()) {
        httpRequest.setParams(params);
    }
    String result = httpRequest.doPost();

    log.debug("response result: {}", result);

    JSONObject data = JSONObject.fromObject(result);

    if (!data.getBoolean("success")) {
        log.error("request cdi error, url: {}, result: {}", url, data);
    }

    return data;
}



    public String doPost() {
    String responseString = null;

    CloseableHttpClient httpclient = null;

    try {
        httpclient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(this.url);

        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(95 * 1000)
                .setConnectTimeout(100 * 1000).build();

        httpPost.setConfig(requestConfig);

        httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=" + this.requestCharset);
        //httpPost.setHeader("Content-Type", "application/json; charset=" + this.requestCharset);
        //httpPost.setHeader("Accept", "application/json");
        if (this.params != null && !this.params.isEmpty()) {
            List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();

            Entry<String, String> entry = null;

            for (Iterator<Entry<String, String>> iter = this.params.entrySet().iterator(); iter.hasNext();) {
                entry = iter.next();
                log.info("key is {} ",entry.getKey());
                nameValuePairList.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
                //entry.getValue()
            }
            log.info("nameValuePairList : {} ",nameValuePairList.toString());

            httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairList, this.requestCharset));

            log.info("httpPost.getEntity() : {} ",httpPost.getEntity().toString());

        }
        HttpResponse httpResponse = httpclient.execute(httpPost);

        if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            if (this.responseCharset == null || "".equals(this.responseCharset)) {
                this.responseCharset = getCharset(httpResponse);
            }

            if (isGzip(httpResponse)) {
                responseString = EntityUtils.toString(new GzipDecompressingEntity(httpResponse.getEntity()),
                        this.responseCharset);
            } else {
                responseString = EntityUtils.toString(httpResponse.getEntity(), this.responseCharset);
            }
        }
    } catch (Exception e) {
        //log.error("Http post request error: {}", e.getMessage());
        e.printStackTrace();
    } finally {
        try {
            if (httpclient != null) {
                httpclient.close();
            }
        } catch (IOException e) {
            log.error(e.toString());
        }
    }

    return responseString;
}



    下面是spring mvc 接收 代码
    @RequestMapping(value = { "/infoDayHits/{proSymbol:[A-Za-z]+}" }, method = {RequestMethod.GET,RequestMethod.POST})
@ResponseBody
public String addInfoDayHit(@PathVariable String proSymbol,String data) {
    try {
        log.info("add {} InfoDayHit start...", proSymbol);
        log.info("data: {}", data);
        //InfoDayHit infoDayHit = new InfoDayHit();
        //ModelData modelData = JsonUtils.toObject(data, ModelData.class);

        ModelData modelData = JsonUtils.toObject(data, ModelData.class);
        // key: synchDate -- 2017-11-07  year:2017 mmdd: "1107"
        // key: infoDayHitsData
        // infoDayHitsList JsonUtils.toObject(infoDayHitsData, ModelData[].class)
        // for each infoDayHitsList ModelData --key infoId; key dayHits
        String year = modelData.get("synchDate").toString().substring(0,4);
        String mmDD = modelData.get("synchDate").toString().substring(5).replace("-", "");
        log.info("year: {}", year);
        log.info("mmDD: {}", mmDD);
        //modelData.get("infoDayHitsData")
        @SuppressWarnings("rawtypes")
        List hitData =  (List) modelData.get("infoDayHitsData");
        infoDayHitService.addInfoDayHit(hitData, proSymbol, year, mmDD);

        log.info("add InfoDayHit end...");
        //return R.success();
    }catch (Exception e) {
        log.error(e.toString());
    }
    return R.success();
}
    接收到的 data 打印 为null,但是在别的服务器上 测试 是可以 接收到 参数的
  • 写回答

4条回答 默认 最新

  • Harrison_HX 2018-01-29 10:51
    关注

    把data参数放到json字符串中试试?

    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)