WebService接口学习(二):如何从本系统调用第三方系统的方法(适合本系统做第三方的代理)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了WebService接口学习(二):如何从本系统调用第三方系统的方法(适合本系统做第三方的代理),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3928字,纯文字阅读大概需要6分钟。
内容图文
首先我们要知道第三方系统是怎么实现的方法,得找到该方法,从而我们才能调用,通过网页的按钮调试来找到。
因为我想挂号,我找到对应的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接口学习(二):如何从本系统调用第三方系统的方法(适合本系统做第三方的代理)全部内容,希望文章能够帮你解决WebService接口学习(二):如何从本系统调用第三方系统的方法(适合本系统做第三方的代理)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。