【HTTP】HttpClient实现HTTP请求

在接口对接中遇到客户端使用HttpClient发送加密请求,服务端解密后返回数据,客户端解密失败。问题源于@RestController注解导致字符串被json化。解决方案是使用@Controller注解,但由于其他服务通过FeignClient调用,此方法不可行。最终发现HttpClient可以解决该问题,通过获取HttpResponse的HttpEntity并转换为字符串成功读取输出流数据。

一、前言

       最近在做接口对接,涉及到了加密解密,签名验签等操作。关于这块的技术,在之后的博客中在详谈。大概说一下事情的经过。客户端先把传输的数据进行签名,然后再进行加密,总之就是变成个大字符串传给服务端,服务端进行解密,然后再进行验签。通过之后进行业务处理。把处理结果经过签名和加密操作再传送给客户端。

       问题表现为在服务端把串返给客户端,客户端解密居然失败啦!!!我勒个擦,什么鬼?按理说不应该啊,服务端能成功把客户端传送过来的数据进行解密,反之则不行?!

       后来经过探索才发现问题所在。是因为我们的xxController类加了@RestController注解。众所周知,@RestController注解相当于@Controller注解+@ResponseBody。而@ResponseBody注解的作用是将对象转换成json串。

       字符串转json的结果如下:

    String message="Hello";
        System.out.println("最原始值:"+message);
        String s2json = JSONUtil.beanToJson(message);
        System.out.println("json化字符串:"+s2json);

        String s2 = JSONUtil.jsonToBean(s2json, String.class);
        System.out.println("去json化:"+s2);

输出结果如下:        

       

由输出结果可知字符串json化会把Hello变成“Hello”拿“Hello”去解密自然会失败啦。

二、解决思路

       既然发现了问题所在。那索性直接把@RestController注解换成@Controller注解。换了之后,服务不能正常启动。后来仔细想了想,即使服务能正常启动。该服务还要保证其他服务能够通过feignclient来进行调用。很显然这种思路行不通。

       之后再经理的建议下,查看之前旧系统代码。更加蒙圈了。具体代码类似下面


                
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值