第二篇:java调用公共数据接口:上海市车辆基本信息查询(java调用soap接口)


前言

  第一篇中调用了webxml里的QQ在线状态查询的接口,调用方式是http get。但是在日常工作中,会遇到只支持soap接口的调用方式,本文以上海市公共数据开放平台中的接口为案例,给大家作为参考。博主以拿到数据为目标,有更好的方法,欢迎大家评论!

  • 后续在项目中会逐步添加以下数据接口:
  • 上海市公共数据开放平台
  • 阿里云云市场接口(免费+收费)
  • 苏州市公共数据平台
  • 等等…
    为方便以后添加新内容,文章中的步骤比较繁琐,比较着急的同学直接去impl看!

一、找个接口作为案例

我们访问: https://data.sh.gov.cn/可以看到有很多公共接口,我们选一个简单的接口作为案例:

在这里插入图片描述

二、查看文档

1.查看接口文档

先找到接口说明与相关文档
在这里插入图片描述

2.确认接口地址与参数

打开http://180.168.211.29:8080/jxwjk/services/JXWJK?wsdl,拉到最后。

在这里插入图片描述

结合上面文档的内容,我们可以确认:
1.address:http://180.168.211.29:8080/jxwjk/services/JXWJK
2.服务名称:JXWJK
3.方法名(下载的文档里面有):getVwVehicle
3.参数(下载的文档里面有):
    hphm:号牌号码(支持模糊查询)
    clpp1:中文品牌(支持模糊查询)
    zt:状态(支持模糊查询)
    fzjg:发证机关(支持模糊查询)
4.返回值(下载的文档里面有):hphm、hpzl、clpp1、zt、fzjg

三、编码(找代码直接跳这里!)

确认好接口内容,新建一个springboot项目,万事俱备,开始敲代码!
项目基础结构在第一篇里面已经创建好了,这边不做介绍。

1.先创建一个返回数据的实体类

package com.example.demo.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
 * @Author: pzc
 * @Date: 2020-12-23 17:57
 * @Description: *
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class VehicleBaseInfo {
    private String hphm;
    private String hpzl;
    private String clpp1;
    private String zt;
    private String fzjg;
}

2.编写service和serviceImpl(按正规写法来)

  • VehicleInfoService
package com.example.demo.service;

import com.example.demo.entity.VehicleBaseInfo;
import org.jdom2.JDOMException;

import java.io.IOException;
import java.util.List;

/**
 * @Author: pzc
 * @Date: 2020-12-23 17:49
 * @Description: *
 */
public interface VehicleInfoService {

   //公共数据平台-获取车辆基本信息
   List<VehicleBaseInfo> getBaseInfoVehicle(String hphm, String zt, String clpp1, String fzjg) throws IOException, JDOMException;

}
  • VehicleInfoServiceImpl (想直接用的可以只看impl)
package com.example.demo.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.demo.entity.VehicleBaseInfo;
import com.example.demo.service.VehicleInfoService;
import com.example.demo.utils.SoapUtil;
import com.example.demo.utils.XMLUtils;
import org.jdom2.JDOMException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author: pzc
 * @Date: 2020-12-23 17:51
 * @Description: *
 */

@Service
public class VehicleInfoServiceImpl implements VehicleInfoService {

    private static Logger logger = LoggerFactory.getLogger(VehicleInfoServiceImpl.class);

    @Autowired
    private RestTemplate restTemplate;

    String baseUrl = "http://180.168.211.29:8080/jxwjk/services/JXWJK";

    @Override
    public List<VehicleBaseInfo> getBaseInfoVehicle(String hphm, String zt, String clpp1, String fzjg) throws IOException, JDOMException {
        ArrayList<String> parameters = new ArrayList<>();
        parameters.add(hphm);
        parameters.add(clpp1);
        parameters.add(zt);
        parameters.add(fzjg);
        StringBuffer soapString = SoapUtil.getSoapString("getVwVehicle", parameters);
        String webServiceAndSoap = null;
        webServiceAndSoap = SoapUtil.getWebServiceAndSoap(baseUrl, "JXWJK", "getVehicle", soapString);
        JSONObject returnAllXml2Json = XMLUtils.XMLReader(webServiceAndSoap,"utf-8");
        JSONArray  ResponseALLJson= returnAllXml2Json.getJSONObject("Envelope")
                .getJSONArray("Body")
                .getJSONObject(0)
                .getJSONArray("getVwVehicleResponse")
                .getJSONObject(0)
                .getJSONArray("out");
        JSONObject responseDataJson = XMLUtils.XMLReader(ResponseALLJson.get(0).toString(), "GBK");
        JSONArray dataJsonArray = responseDataJson.getJSONObject("Root").getJSONArray("Data");
        System.out.println(dataJsonArray);
        List<VehicleBaseInfo> vehicleBaseInfos = JSONObject.parseArray(dataJsonArray.toJSONString(),
                VehicleBaseInfo.class);
        System.out.println(vehicleBaseInfos);
        return vehicleBaseInfos;
    }

}

这里用到了两个util, 大家自行下载:SoapUtilXMLUtils

3.写个单元测试

异常就先不处理了,。。。大家可以自行优化一下

package com.example.demo;

import com.example.demo.entity.VehicleBaseInfo;
import com.example.demo.service.VehicleInfoService;
import org.jdom2.JDOMException;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.List;

/**
 * @author pzc
 * @version 1.0
 * @date 2021/1/12 11:26
 */
@SpringBootTest
public class VehicleInfoTests {

    @Autowired
    private VehicleInfoService vehicleInfoService;

    @Test
    void contextLoads() throws IOException, JDOMException {
        List<VehicleBaseInfo> baseInfoVehicle = vehicleInfoService.getBaseInfoVehicle("X70","G","赛","沪");
        System.out.println(baseInfoVehicle);
    }

}

在这里插入图片描述

拿到了list,后面怎么处理就看自己了。

注意:
1.需要实名注册一个账号,不然看不到接口文档
2.该接口商用问题:曾发邮件咨询过对方,未得到正面回应,还是建议不要商用哦!

在这里插入图片描述

四、总结

目前完成了项目的第二步,后续有空会添加更多的新的接口功能。
下一篇:XXXXXXXXXXXXXXXXXXXXXXXXXX(等我写完会把它点亮哦!)
在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今夜明珠色

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值