首页 > 其他 > 详细

调用第三方接口,传输二字节流,每次批量传输都有一部分传输失败,接口响应超时,返回400,不管修改超时时间多久都不成功

时间:2019-10-25 20:10:51      阅读:314      评论:0      收藏:0      [点我收藏+]

一.使用feign方式

接口调用使用feign包装第三方接口

@FeignClient(name = "xxx-service", url = "${url}", configuration = { FeignClientConfig.class })
public interface ServiceFeign {

@RequestMapping(value = "${a.url}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public AResponse getA(ARequest request);

}

调用位置

public class TestA{

  @Autoware

  private ServiceFeign serviceFeign;

  public xx methodA(xxx){

     serviceFeign.getA(xxx);

  }

}

 

开启feign日志发现报400,第三方无响应返回

怀疑时feign的问题故换成http的:

/**
     * 以HTTP post方式访问指定URL
     * @param url 访问URL
     * @param jsonObject json对象
     * @return 服务器响应内容
     */
    public static String jsonPost(String url, String jsonObject) {
        PostMethod method = new PostMethod(url);
        String body = null;
        if (StringUtils.isNotBlank(jsonObject)) {
            try {
                method.addRequestHeader("Content-type", "application/json; charset=utf-8");
                method.addRequestHeader("Accept", "text/xml,text/javascript,text/html,application/json");
                RequestEntity requestEntity = new StringRequestEntity(jsonObject, "application/json", "utf-8");
                method.setRequestEntity(requestEntity);
                httpClient.executeMethod(method);
                InputStream inputStream = method.getResponseBodyAsStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                StringBuffer stringBuffer = new StringBuffer();
                String str = "";
                while ((str = br.readLine()) != null) {
                    stringBuffer.append(str);
                }
                body = stringBuffer.toString();
                log.info("http返回结果{}",body);
            } catch (Exception e) {
                log.error("连接异常:"+e.getMessage(),e);
            } finally {
                method.releaseConnection();
            }
        }
        return body;
    }

发现还是一样的问题(fegin底层可能也是这种方式实现的),

最后解决方法:使用map方式成功了

/**
     * 以HTTP post方式访问指定URL
     * @param url 访问URL
     * @param paramData map对象
     * @return 服务器响应内容
     */
    @SuppressWarnings("deprecation")
    public static String jsonPost(String url, Map<String, Object> paramData) {
        PostMethod method = new PostMethod(url);
        String body = null;
        if (method != null && paramData != null) {
            try {
                method.addRequestHeader("Content-type", "application/json; charset=utf-8");
                method.addRequestHeader("Accept", "application/json");
                String jsonObject = JSONObject.toJSONString(paramData);
                method.setRequestBody(jsonObject);
                httpClient.executeMethod(method);
                log.info("http-jsonPost-jsonObject:" + method.getResponseBodyAsString());
                InputStream inputStream = method.getResponseBodyAsStream();
                BufferedReader br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                StringBuffer stringBuffer = new StringBuffer();
                String str = "";
                while ((str = br.readLine()) != null) {
                    stringBuffer.append(str);
                }
                body = stringBuffer.toString();
            }catch(SocketTimeoutException te){ 
                log.error("连接超时:"+te.getMessage());
            }catch (Exception e) {
                log.error("连接异常:"+e.getMessage(),e);
            } finally {
                method.releaseConnection();
            }
        }
        return body;
    }

记录一下

调用第三方接口,传输二字节流,每次批量传输都有一部分传输失败,接口响应超时,返回400,不管修改超时时间多久都不成功

原文:https://www.cnblogs.com/qqq9527/p/11740521.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!