一、创建2个SpringBoot工程(一个客户端,一个服务端)
前言
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版权协议,转载请附上原文出处链接和本声明。