场景
现在一个专门负责复习算法的服务,筛选出了用户今天需要复习的笔记的ids,现在要调用笔记服务根据ids查询的接口。
请问复习服务怎么将ids发到笔记服务,笔记服务怎么接收。
思路
发的时候肯定是用字符串,接收的时候,用List接收到了就接收,接收不到就也用字符串,收到了再解析成数组。
参考代码
发送
// 提取需要复习的笔记 ID
List<Long> reviewNoteIds = reviewList.stream()
.map(NoteAttributeDTO::getNid)
.toList();
// 转换成逗号分隔的字符串
String idsStr = reviewNoteIds.stream()
.map(String::valueOf)
.collect(Collectors.joining(","));
feign:
// 根据ids查询笔记
@GetMapping("/api/note-service/note/findNotesByIds")
ResultData<List<NoteDTO>> findNotesByIds(@RequestParam("ids") String ids);
接收
用List直接接收
@GetMapping("/findNotesByIds")
public ResultData<List<Note>> findNotesByIds(@RequestParam("ids") List<Long> ids) {
if (ids == null || ids.isEmpty()) {
return ResultData.failure(ResultCodeEnum.FAIL, "笔记 ID 不能为空");
}
List<Note> notes = noteService.findNotesByIds(ids);
return ResultData.success(notes);
}
先接收成字符串,再解析
// 次接口仅用来测试前端怎么给后端传递一个数组
@GetMapping("/arrayTest")
public ResultData<List<Long>> arrayTest(@RequestParam("ids") String ids) {
// 逗号分隔解析
List<Long> idList = Arrays.stream(ids.split(","))
.map(Long::parseLong)
.collect(Collectors.toList());
System.out.println(idList);
return ResultData.success(idList);
}
总结
远程调用要传数组,传的一方肯定用字符串。收的一方看能用List接收到,就用List,不能用List就也用字符串接收。
额,别的方法还没试过,可能还有更简单的方法,不过我感觉这种暂时够用了,顶多传的时候,再粘几行代码就ok了。