WebService接口学习(二):如何从本系统调用第三方系统的方法(适合本系统做第三方的代理)
2021/5/2 18:28:58
本文主要是介绍WebService接口学习(二):如何从本系统调用第三方系统的方法(适合本系统做第三方的代理),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
首先我们要知道第三方系统是怎么实现的方法,得找到该方法,从而我们才能调用,通过网页的按钮调试来找到。
因为我想挂号,我找到对应的Controller层的方法
/** * 提交挂号信息 * @param reqVO * @return */ @PostMapping(value = "/addRegisterInfor") public BaseResponse<String> addRegisterInfor(@RequestBody @Validated RegisterInforReqVO reqVO) { return iRegisterService.addRegisterInfor(reqVO); }
然后顺着业务层找到了如下方法:
/** * 保存挂号记录 * * @param reqVO * @return */ @Override public BaseResponse<String> addRegisterInfor(RegisterInforReqVO reqVO) { ... }
这时候我就开心,这不简单了,但事情却没有这么简单,看下去就知道了
我开始写接口了
@WebMethod String requestPatient(String patientInfo);
@Override public String requestPatient(String patientInfo) { //这里开始有问题,在调用的过程时候iRegisterService为NULL return iRegisterService.requestPatient(patientInfo); }
在第三方系统写了要怎么调用的实现方法
//注册对外请求接口 public String requestPatient(String patientInfo) { try { JSONArray jsonArray=JSONArray.fromObject(patientInfo); PatientInforReqVO patientInforReqVO=new PatientInforReqVO(); patientInforReqVO.setName(jsonArray.getJSONObject(0).get("username").toString()); patientInforReqVO.setIdCard(jsonArray.getJSONObject(0).get("idcard").toString()); patientInforReqVO.setSex(jsonArray.getJSONObject(0).get("sex").toString()); patientInforReqVO.setNationality(jsonArray.getJSONObject(0).get("nation").toString()); patientInforReqVO.setBirthday(jsonArray.getJSONObject(0).get("birthday").toString()); patientInforReqVO.setAddress(jsonArray.getJSONObject(0).get("address").toString()); patientInforReqVO.setCardId(jsonArray.getJSONObject(0).get("cardid").toString()); patientInforReqVO.setTelphone(jsonArray.getJSONObject(0).get("cellphone").toString()); //new RegisterServiceImpl()这个导致业务层对象为空,我当时想着调用本层的方法,但行不通 new RegisterServiceImpl().addPatientInfor(patientInforReqVO); return "success"; }catch (Exception e) { e.printStackTrace(); //调用发送失败详细信息方法 return e.toString(); } }
new RegisterServiceImpl()导致生成了新的业务层对象,新的对象里各个@Autowired的属性肯定是空的,这样在webservice接口手动注入的对象全部没用上了,其实当时我还没发现,我是写了本系统的方法调试过程才发现的,所以说调试很重要!!!
先说个思路,webservice接口调用从Controller层开始,我感觉一开始就要从Controller开始比较好,手动注入Controller对象,方法在上一篇有。
然后可以写本系统的接口调用方法了
public static String requestPatient(String method,String parm){ try{ Client c = getClient(); // 调用接口,parm为需要给第三方系统的数据 Object[] os = c.invoke(method,parm); return os[0].toString(); }catch (Exception e){ e.printStackTrace(); return e.toString(); } }
在Controller层写了
@ResponseBody @RequestMapping("/doAdd") public Object doAdd(Patient patient){ AjaxResult result=new AjaxResult(); int count=0; try { List<Patient> patientList=new ArrayList<Patient>(); //把从实体类对象信息添加到List中 patientList.add(patient); //把List转换成JSON字符串 String request= JSONUtil.listToJson(patientList); //调用webservice接口来给his传注册信息。 String reply= WebServiceUtil.requestPatient("requestPatient",request); //如果收到success,证明his保存用户信息成功,不成功的话返回his给我们的错误 if(reply.equals("success")){ count= patientService1.savePatient(patient); }else { result.setSuccess(false); result.setMessage(reply); } result.setSuccess(count==1); }catch (Exception e){ result.setSuccess(false); e.printStackTrace(); result.setMessage("注册失败!"); } return result; }
这样就写好了,但是事情并没有简单,我们发现数据传到第三方系统,在我写的解析数据方法出了问题,
我之前写了
JSONArray jsonArray=JSONArray.fromObject(patientInfo);
我以为得到的是JSONArray,结果里面剥开看,是JSONObject,导致我用数组下标取不了数据库
jsonArray.getJSONArray(0).get(0).toString();
后来在调试的过程中发现了是JSONObject就用
jsonArray.getJSONObject(0).get("username").toString()
来找对应的key的值。
然后就可以
iRegisterService.addPatientInfor(patientInforReqVO);
保存数据库了,iRegisterService是后来更改在Controller层调用了,不在new一个了。
这篇关于WebService接口学习(二):如何从本系统调用第三方系统的方法(适合本系统做第三方的代理)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-25【机器学习(二)】分类和回归任务-决策树(Decision Tree,DT)算法-Sentosa_DSML社区版
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享