方案背景
在我们的营养探索馆项目,有这么一个需求,调用系统A发起请求,将一份数据传输到被调用端B去进行数据库同步。这个时侯当然是用Feign来实现。
A B
json(feign) -----------> execute
success <----------- response
方案详情
被调用系统B(执行业务)
@Controller
public class ProjectController {
@Autowired
CheckProjectRepository checkProjectRepository;
@PostMapping("/project/sync")
public ApiReturnObject syncProject(String projectListStr) {
//转换json->java list
System.out.println("projectListStr->"+projectListStr);
//fastjson格式化到list
List<CheckProject> projectList=JSONObject.parseArray(projectListStr,CheckProject.class);
if(projectList!=null) {
checkProjectRepository.deleteAll();
for (CheckProject p:projectList){
System.out.println("p->"+JSON.toJSONString(p));
checkProjectRepository.save(p);
}
}
return ApiReturnUtil.success("同步成功");
}
}
调用系统A(发起调用系统B)
@GetMapping("/sync")
public ApiReturnObject syncProject() {
//源数据
List<FacilityType> facilityTypeList=facilityTypeRepository.findAll();
//转换为被调用系统的数据
List<CheckProject> projectList=new ArrayList<CheckProject>();
for (FacilityType facilityType:facilityTypeList){
CheckProject project=new CheckProject();
project.setFacilityTypeName(facilityType.getFacilityTypeName());
project.setFacilityTypeNum(facilityType.getFacilityTypeNum());
project.setId(facilityType.getId());
project.setIsRequired("1");
project.setStatus("1");
projectList.add(project);
}
//格式化为json并进行feign远程调用
checkCollectysysRemoteClient.syncProject(JSON.toJSONString(projectList));
return ApiReturnUtil.success("操作成功");
}
feign定义(对接被调用系统B)
//name=目标系统的id
@FeignClient(name = "tcbj-yytsg-checkcollectsys")
public interface CheckCollectysysRemoteClient {
//目标系统的完整访问地址
@PostMapping("/checkcollectsys/project/sync")
public ApiReturnObject syncProject(@RequestParam(value="projectListStr") String projectListStr);
}