zoukankan      html  css  js  c++  java
  • 使用feign封装第三方Http接口,请求出现400

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

    一.使用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;
        }

    记录一下,具体原因不是很明白!!!

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/qqq9527/p/11740521.html
Copyright © 2011-2022 走看看