OpenAPI扩展插件:序列化出入参

变更记录
产品版本 | 更新内容 | 更新日期 |
| V5.0.018 | 初始版本 | 2023年3月 |
| V6.0.8 | 序列化插件新增方法,支持获取全部参数 | 2024年4月 |
1 简介
1.1 功能介绍
OpenAPI支持在操作API、自定义API、脚本API中注册序列化插件,通过编写插件,可以根据具体业务场景自定义API的出参和入参的序列化和反序列化类。
1.2 系统路径
【开放服务云】→【OpenAPI】→【API管理】 →【API开发】
2 主要操作
2.1 反序列化入参
当接口传参时,可能存在请求头Content-Type类型为Text/plain,但OpenAPI暂没对这种类型的入参进行处理,那么此时可以编写反序列化插件进行入参的反序列化,拿到反序列化后的入参后,对入参进行干预。

1)首先,用户需要编写反序列化插件,在类中需实现对应接口,该方法中,request即为还没反序列化的原入参,处理逻辑是将原Text/plain类型的入参反序列化为map,然后进行入参干预处理,最后返回这个map给OpenAPI进行处理。
操作 | 接口 | 重写方法 |
反序列化 | kd.bos.openapi.api.plugin.ApiDeserializerPlugin | deserializer |
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import kd.bos.openapi.api.plugin.ApiDeserializerPlugin;
import kd.bos.openapi.common.constant.MediaType;
import java.util.Map;
public class DemoApiDeserializerPlugin implements ApiDeserializerPlugin {
private static final long serialVersionUID = 4568461229506221705L;
@Override
public Map<String, Object> deserializer(String request, String contentType) {
try {
if(contentType.contains(MediaType.TEXT_PLAIN)){
//请求的text/plain类型反序列化为Map
Map<String, Object> map = new ObjectMapper().readValue(request, new TypeReference<Map<String, Object>>() {});
//干预入参
Map<String, Object> data = (Map<String, Object>) map.get("data");
data.put("billno","unittest-001");
return map;
}else if(contentType.contains(MediaType.APPLICATION_XML)){
//XML格式反序列化逻辑
return ...;
}else {
return ...;
}
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
}2)接下来,回到OpenAPI应用,在API详情中注册并启用插件。

3)最后,点击“API测试”按钮,打开在线测试弹窗,在系统中实时调试API功能,若插件执行生效,传Text文本时正常能正常解析入参并返回保存结果。

2.2 序列化出参
在实际的业务场景中,第三方需要接收的返回参数可能是特定的非JSON格式数据,如Text文本格式,结果不带引号,那么此时也可以通过编写序列化插件对出参进行个性化处理。
1)首先,仍然是编写插件,重写serialize方法。
操作 | 接口 | 重写方法 |
序列化 | kd.bos.openapi.api.plugin.ApiSerializerPlugin | serialize |
其中参数response为还没序列化的原出参,这里逻辑直接重新返回一个自定义的字符文本。
注意:序列化出参插件严禁直接抛出异常,需要用户自行处理并返回异常错误信息。
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import kd.bos.openapi.api.plugin.ApiSerializerPlugin; import kd.bos.openapi.api.p
OpenAPI扩展插件:序列化出入参
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



