使用SpringBoot创建WebService(包含服务端和客户端)

前言

步骤

一、创建2个SpringBoot工程(一个客户端,一个服务端)

二、服务端代码

1、服务端结构

2、服务端pom文件

3、服务端application.properties

4、服务端创建一个User实体类

5、服务端创建一个接口

6、服务端创建一个接口的实现类

7、服务端发布服务

8、服务端测试

三、客户端代码

1、客户端结构

2、客户端pom文件

3、客户端application.properties

4、客户端创建一个User实体类

5、利用wsimport命令生成客户端代码

6、代码拷贝到客户端

7、编写一个controller

8、客户端测试



前言

WebService基本概念这里不说了,网上很多。我就直接进入主题了

步骤

一、创建2个SpringBoot工程(一个客户端,一个服务端)

创建步骤我这里就不说了,用IDEA创建一个SpringBoot工程不会的可以自己百度。

二、服务端代码

1、服务端结构

2、服务端pom文件

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>

3、服务端application.properties

server.port=9001

4、服务端创建一个User实体类

public class User implements Serializable {
    private int id;
    private String name;
    private int age;

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

5、服务端创建一个接口

@WebService
public interface UserWebService {
    @WebMethod
    String getUserById(@WebParam(name = "id") Integer id);
}

6、服务端创建一个接口的实现类

@WebService
public class UserWebServiceImpl implements UserWebService {

    @WebMethod
    @Override
    public String getUserById(@WebParam(name = "id") Integer id) {
        //一般数据都是从数据库查找,我这里直接伪造一下
        User user1 = new User(1, "Tom", 20);
        User user2 = new User(2, "Mary", 18);
        User user3 = new User(3, "Lucy", 19);
        List<User> userList = new ArrayList<>();
        userList.add(user1);
        userList.add(user2);
        userList.add(user3);
        for (int i = 0; i < userList.size(); i++) {
            //判断一下用户输入的id是否可以匹配上某个User的id
            if (userList.get(i).getId() == id) {
                //找到用户直接转成json返回去
                String json = JSONArray.toJSON(userList.get(i)).toString();
                return json;
            }
        }
        //未找到直接返回一个错误消息
        return "该id用户不存在";
    }
}

7、服务端发布服务

@SpringBootApplication
public class WebserviceServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebserviceServerApplication.class, args);

        //这里的接口不能和application.properties中的port一样,不然会报错
        String url = "http://localhost:8088/UserWebService";
        Endpoint.publish(url,new UserWebServiceImpl());
        System.out.println("服务发布成功");
    }

8、服务端测试

浏览器输入:http://localhost:8088/UserWebService?wsdl   (后面的?wsdl一定要加),出现这个就说明发布成功了。

三、客户端代码

1、客户端结构

2、客户端pom文件

和服务端的一样就行了

3、客户端application.properties

server.port=9002

4、客户端创建一个User实体类

和服务端User类一样,这里不贴了。

5、利用wsimport命令生成客户端代码

(wsimport有些命令参数,例如可以指定包结构等等,感兴趣的自己去搜一下)

随便找个空文件夹利用dos命令进入到该文件夹,或者直接在该文件夹下按住Shift+鼠标右击,选择在此处打开命令窗口

输入命令:

wsimport -s . http://localhost:8088/UserWebService?wsdl

6、代码拷贝到客户端

客户端随便创建一个包将选中的2个文件拷贝进去

引入相应的class,注意UserWebServiceImpl中的ObjectFactory别引错包了(正确:import com.oracle.xmlns.internal.webservices.jaxws_databinding.ObjectFactory;),不然会报错。

7、编写一个controller

@RestController
public class UserController {

    @GetMapping("/getUserById/{id}")
    public String getUserById(@PathVariable("id") Integer id){
        UserWebServiceImplService userWebServiceImplService = new UserWebServiceImplService();
        //获取服务实现类
        UserWebServiceImpl port = userWebServiceImplService.getPort(UserWebServiceImpl.class);
        //获取服务的方法
        String result = port.getUserById(id);
        return result;
    }
}

8、客户端测试

打开浏览器输入url测试一下


版权声明:本文为aa821198112原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。