首页 > 其他分享 >对接第三方项目遇到的一些问题

对接第三方项目遇到的一些问题

时间:2022-11-08 22:33:08浏览次数:44  
标签:返回 遇到 对接 字段 接收 数据 第三方 ResponseVo

  目前开发的项目中,根据实际需求要和其他项目进行对接,来实现一些功能。最开始对接的就是获取菜单资源信息。

菜单相关信息全部是配置在其他项目中的,需要使用的时候就直接去调用他们的接口,获取菜单相关的权限信息。然后

将数据信息缓存在自己的项目中,这样就把公共的功能给抽取出来,不用在重复进行开发。自己一开始对接的就是权限

相关的内容,菜单、按钮相关的资源等等。经过反反复复地调试,总算是对接成功,让程序能够正常运行起来。在这之后

由于功能的增多,需要对接的内容也开始变多。

  自己在对接过程中踩了不少的坑,主要的是接收返回参数时报错的问题和数据转换的问题。请看下面的类似的数据接收

封装的类;

@Data

public class ResponseVo<T> {

    /*

     * 返回状态码

     * */

    private int code;

 

    /*

     * 返回消息

     * */

    private String msg;

 

    /*

     * 返回数据

     * */

    private T data;

}

使用feign进行调用,写法如下.

@FeignClient(name = "testFeign" )

public interface TestFeign {

    @RequestMapping(value = "/test/feign", method = RequestMethod.POST)

    ResponseVo callFixData(@RequestBody JSONObject jSONObject) throws Exception;

}

在ResponseVo 的返回数据中使用泛型进行接收,没有直接写死。在接收的时候,出现各种问题。

自己写的其中一个接口是使用String进行接收的如ResponseVo <String>,程序可以正常执行。

.a.转换数据异常。

获取具体返回的数据,由于是String类型的,就直接使用fastJson中的JSON.parseArray()方法进行

转换,结果报错。大致报错信息是转换的时候出现无法解析的字符。解决办法是对获取的数据

先进行JSON.toJSONString()操作,之后在将数据转换为想要的列表数据,问题解决。

返回的数据形式格式为:

{

“code”: 10000,

“msg”: “查询成功”:

data: [

{

“字段一”: “值1”,

“字段二”: “值2”

},

{

“字段一”: “值3”,

“字段二”: “值4”

}

]

}

.b.数据接收异常.java.util.LinkedHashMap cannot be cast to xxx

自己在对接第二个接口的时候,打算仍然使用上面的方式ResponseVo <String>进行接收,可是在接收

数据的时候就直接报错,说是LinkedHashMap不能转换为xxx实体类。由于返回的数据很少,

自己就想办法直接进行处理,没有在使用实体类进行接收。最终使用ResponseVo <HashMap>的方式

进行接收,获取值则直接使用HashMap里面的get方法来获取自己想要的值,问题解决。数据

格式如下:

{

“code”: 10000,

“msg”: “查询成功”:

data: {

“字段一”: “值1”,

“字段二”: “值2”

}

}

.c.数据接收异常:java.util.ArrayList cannot be cast to String

自己在对接第三个接口的时候,也打算使用第一种方式ResponseVo <String>来进行接收,可结果发现

在接收返回数据的时候,就直接报错。由于返回的是列表数据,因此也不能直接使用第二种方式进行

接收,数据格式不匹配。第一种方式或者第二种都不行,程序还在报错,该如何处理呢?这时候自己

能想到的就是先保证程序不报错,能够接收任意数据类型的只有Java中的Object类型。报着试一试

的态度,使用ResponseVo <Object>的方式进行接收。果然没有报错,问题解决。在转换的时候,不能

直接将Object数据转换为String字符串然后使用,同样的需要先使用JSON.toJSONString()方法先处理,

然后才能将数据转换为想要的对象。数据格式如下,

{

“code”: 10000,

“msg”: “查询成功”:

data: [

{

“字段一”: “值1”,

“字段二”: “值2”

},

{

“字段一”: “值3”,

“字段二”: “值4”

}

]

}

说明:第一种方式和第三种方式返回的都是列表数据,可是一个可以使用String来接收,一个不能,

自己也很困惑到底是什么原因造成的。通过分析猜测有可能是被调用方在返回数据前,一个使用

了toJSONString方法将数据转换为了JSON数据,一个直接返回数据。

 

总结:通过这次和其他项目进行对接,学习到很多东西。最后建议使用Object类进行统一接收,数据

处理的时候,建议统一先进行JSON.toJSONString()处理。这样能减少很多的数据接收和数据转换可能存在

的问题,加快开发对接速度。如果返回的数据不多,则可以考虑如下写法

JSONObject callFixData(@RequestBody JSONObject jSONObject) throws Exception;

这样在解析数据的时候,就不在需要创建多余的实体类。

标签:返回,遇到,对接,字段,接收,数据,第三方,ResponseVo
From: https://www.cnblogs.com/yilangcode/p/16871466.html

相关文章