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一个了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
银行的ESB系统是一种企业级的集成系统,用于连接不同的系统和应用程序,实现数据交换和业务流程的管理。其中,WebService是一种基于XML的远程调用协议,可以让不同的系统通过互联网进行通信。 要调用银行ESB系统中的WebService,通常需要以下几个步骤: 1. 确定要调用WebService接口:首先需要确定要调用接口,即需要传输的数据和服务的功能。银行ESB系统一般会提供接口文档或API文档,您可以根据文档了解如何调用特定的接口。 2. 创建WebService客户端:根据接口文档,您需要在您的应用程序中创建一个WebService客户端。具体实现方式取决于您所使用的编程语言和开发环境,可以使用工具或手动创建客户端。 3. 设置WebService请求参数:在调用WebService之前,您需要设置请求参数。这些参数可能包括身份验证信息、请求类型、请求参数等。根据接口文档提供的要求,将参数设置为正确的值。 4. 发送WebService请求:通过调用WebService客户端提供的方法,发送请求到银行ESB系统。请求会包含您设置的参数和数据。 5. 处理WebService响应:一旦银行ESB系统接收到请求并处理完毕,会返回响应数据。您可以根据接口文档定义的响应格式来解析和处理返回的数据。 通过以上步骤,您可以成功调用银行ESB系统中的WebService接口,实现与银行系统的数据交换和业务操作。同时,为了保证安全性和可靠性,您可能还需要在调用过程中进行数据加密、身份验证、错误处理等相关的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值