首页 > 其他分享 >项目中请求第三方接口踩坑记录

项目中请求第三方接口踩坑记录

时间:2024-03-19 20:34:52浏览次数:22  
标签:body HttpEntity String 接口 第三方 public responseEntity apiUrl 请求

问题代码

@Slf4j
public class TestWechat {

    public <T extends WxBaseReq, K extends WxBaseResp> K sendV3(T t, String method, Class<K> kClass) {
        K k = null;
        String body = JSON.toJSONString(t);
        String apiUrl = "";//请求API
        log.info("wechat http v3 requestUrl :{} ,body:{}", apiUrl, body);
        ResponseEntity<K> responseEntity = null;
        Long startTime = System.currentTimeMillis();
        try {
            // 有问题的地方
            HttpEntity<T> entity = new HttpEntity<>(t, getHttpHeader("POST", apiUrl, body));
            responseEntity = new RestTemplate().postForEntity(apiUrl, entity, kClass);
            log.info("wechat http v3 response:{}", responseEntity);
            if (responseEntity != null) {
                k = responseEntity.getBody();
            }
        } catch (HttpClientErrorException e) {
            log.info("wechat http v3 HttpClientErrorException:{}", e.getResponseBodyAsString());
            throw e;
        }
        return k;
    }

    private HttpHeaders getHttpHeader(String method, String apiUrl, String body) {
        //设置签名的请求头
        return new HttpHeaders();
    }

    public static class WxBaseReq {

    }

    public static class WxBaseResp {

    }
}

问题描述

我们在使用 getHttpHeader() 方法计算签名时,使用的是 t 对象转换为 json 后的字符串,而网络请求中传输过去的是 t 对象,网络框架默认使用 jackson 来序列化对象,而这里我们使用了 fastjson,两者结果不一致,导致最终签名错误。

解决方式

HttpEntity<T> entity = new HttpEntity<>(body, getHttpHeader("POST", apiUrl, body));

将json 字符串通过网络传输,这样就不会受不同 json 框架的影响了。

标签:body,HttpEntity,String,接口,第三方,public,responseEntity,apiUrl,请求
From: https://www.cnblogs.com/strongmore/p/18050078

相关文章

  • Go语言的隐式契约:探索接口无声的实现
    在讨论Go语言的特性时,我们常常会提到一个独特之处:Go语言中并没有显式的implement关键字用于表明一个类型实现了某个接口。这一点与许多其他面向对象编程语言形成了鲜明对比,比如Java或C#中,实现接口需要明确声明。然而,Go语言采取了一种更加隐式的方式来处理接口和类型之间的关......
  • Java类和接口的工厂模式
    作者平时学习的小总结,希望可以帮到你更好了解。本章节介绍Java类和接口的工厂模式,帮助你对工厂模式有一个新的了解,这三种工厂模式的升级基于前一代的基础上进行升级的,所以一步一步看下去效果会更好。1.简单工厂模式简单工厂模式就是我们把一些类(比如说某一产品汽车,有很多品种看......
  • openGauss Copy接口支持容错机制
    Copy接口支持容错机制可获得性本特性自openGauss1.0.0版本开始引入。特性简介支持将Copy过程中的部分错误导入到指定的错误表中,并且保持Copy过程不被中断。客户价值提升Copy功能的可用性和易用性,提升对于源数据格式异常等常见错误的容忍性和鲁棒性。特性描述openGauss提......
  • 如何快速运用iPaas与协议进行接口对接
    在数字化浪潮的推动下,企业对于数据整合和流程协同的需求日益迫切。然而,传统的数据集成方式往往面临着开发周期长、维护成本高、扩展性差等问题。这时,iPaas(Integration Platform as a Service)作为一种新型的云服务模式,为企业提供了快速、灵活、高效的接口对接解决方案。iPaas......
  • 如何将第三方控件嵌入ToolStrip控件,并提供Design-Time支持
    ToolStripControlHost 旨在通过使用 ToolStripControlHost 构造函数或扩展 ToolStripControlHost 本身来启用任意Windows窗体控件的承载。通过扩展 ToolStripControlHost 并实现公开控件的常用属性和方法的属性和方法,可以更轻松地包装控件。还可以在 ToolStripControlHo......
  • 开源项目&免费接口:高频词提取挖掘文本核心价值
     一、开源项目介绍一款多模态AI能力引擎,专注于提供自然语言处理(NLP)、情感分析、实体识别、图像识别与分类、OCR识别和语音识别等接口服务。该平台功能强大,支持本地化部署,并鼓励用户体验和开发者共同完善,以实现开源共享。可以本地化部署,也可以云端SaaS调用,微信扫码即可登录。......
  • Locust 实现接口关联
    一、首先我们理解下什么是关联? 跟接口测试一样,我们经常需要将上一个接口返回的参数用于第二次请求二、业务场景1:用户需要先登录获取token,之后去加入购物车、下订单、充值等等行为都是需要用到这个身份验证三、解决方案:客户不是每次行为都需要登录,每个客户只需要登录一次......
  • java核心技术卷1 第六章:接口、lambda表达式与内部类
    接口接口不是类,而是描述了符合这个接口的类应该做什么,描述了一组抽象的需求,而没有指定怎么做接口中的所有方法自动是public,接口中声明方法不需要加public(java规范,减少不必要的冗余声明,即使一些程序员为了清晰习惯加上public)实现接口时,需要加上public,不然默认将权限设为了defa......
  • 身份证文字识别ocr免费-身份证实名认证接口-护照识别-Java调用代码
    文字识别技术是针对图片上的文字进行提取,免去人们手动输入的繁琐。针对证件,翔云提供了身份证识别接口、身份证实名认证接口、护照识别接口,身份证识别接口自动提取身份证信息、身份证实名认证接口实时联网查验身份证的真伪。以身份证识别接口Java语言代码为例,欢迎免费体验:pac......
  • JAVA接口代码-从技术到创新、发票ocr、发票查验接口、发票识别
    财政类票据ocr、增值税发票识别、全电票ocr接口是一项重要的技术创新,在数字化、信息化高速发展的商业环境中发挥着至关重要的作用。通过集成翔云API,可快速实现发票信息的自动化识别提取与真伪查验,提升了财务管理效率。就发票识别接口,提供Java语言代码,有需要的人员可在线......