Web Service CXF JAX-RS服务端与客户端简单调用实例

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wxwsfl/article/details/88691584

分别创建服务端和客户端web服务项目,引入jar包:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>4.1.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>4.1.4.RELEASE</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>4.1.4.RELEASE</version>
  <type>jar</type>
  <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-client -->
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-rs-client</artifactId>
  <version>3.1.11</version>
</dependency>

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-transports-http</artifactId>
  <version>3.1.11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxrs -->
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-frontend-jaxrs</artifactId>
  <version>3.1.11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-rs-extension-providers -->
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-rs-extension-providers</artifactId>
  <version>3.1.11</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.codehaus.jettison/jettison -->
<dependency>
  <groupId>org.codehaus.jettison</groupId>
  <artifactId>jettison</artifactId>
  <version>1.4.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.26</version>
</dependency>

服务端:

添加实体类:

package com.diego.entity;

import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

/**
 * 基于RESULT风格的webService,客户端与服务端通讯可以传递xml数据、json数据
 * @XmlRootElement 指定对象序列化为XML或JSON数据时  根节点的名称
 * xml:
 *      <User>
 *          <id></id>
 *          <userName></userName>
 *          <city></city>
 *      </User>
 *
 * json:
 *  {"User":{"id":"1","userName":"","city":""}}
 */
@XmlRootElement(name = "User")
public class User {

    private String id;
    private String userName;
    private String city;

    public String getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", userName='" + userName + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

添加接口:

package com.diego.service;

import com.diego.entity.User;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.List;

/**
 * @Path:访问当前服务接口对应的路径
 */
public interface IUserService {

    /**
     * @Path:访问当前服务接口方法的路径 /userService/user
     * @POST:处理请求的类型 - 对应insert
     * @Consumes:服务器支持请求的数据格式类型
     * @Produces:服务器支持返回的数据格式类型
     */
    @POST
    @Path("/user")
    @Consumes({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})
    public void saveUser(User user);

    /**
     * @PUT  对应update操作
     */
    @PUT
    @Path("/user")
    @Consumes({"application/xml","application/json"})
    public void updateUser(User user);


    /**
     * @GET:对应查询操作
     */
    @GET
    @Path("/user")
    @Produces({"application/xml","application/json"})
    public List<User> getUser(User user);

    /**
     * @GET:对应查询操作
     */
    @GET
    @Path("/user")
    @Consumes({MediaType.APPLICATION_XML})
    @Produces({"application/xml","application/json"})
    public User getUserById(User user);

    /*
     * @GET:对应查询操作
     */
    @GET
    @Path("/user/{id}")
    @Consumes({MediaType.APPLICATION_JSON})
    @Produces({"application/xml","application/json"})
    public User getUserById(@PathParam("id") Integer id);

    /**
     * @DELETE:对应删除操作
     */
    @DELETE
    @Path("/user")
    @Consumes({"application/xml","application/json"})
    public void deleteUser(User user);
}

添加实现类:

package com.diego.service.impl;

import com.diego.entity.User;
import com.diego.service.IUserService;

import java.util.ArrayList;
import java.util.List;

public class IUserServiceImpl implements IUserService {
    public void saveUser(User user) {
        System.out.println("saveUser:"+user.toString());
    }

    public void updateUser(User user) {
        System.out.println("updateUser:"+user.toString());
    }

    public List<User> getUser(User user) {
        List<User> userList = new ArrayList<User>();
        User user1 = new User();
        user1.setId("1");
        user1.setUserName("1");
        user1.setCity("1");
        userList.add(user1);
        User user2 = new User();
        user2.setId("2");
        user2.setUserName("2");
        user2.setCity("2");
        userList.add(user2);
        return userList;
    }

    public User getUserById(Integer id) {
        User user1 = new User();
        user1.setId("1");
        user1.setUserName("1");
        user1.setCity("1");
        return user1;
    }

    public User getUserById(User user) {
        User user1 = new User();
        user1.setId("111");
        user1.setUserName("1111");
        user1.setCity("111");
        return user1;
    }

    public void deleteUser(User user) {
        System.out.println("deleteUser:"+user.toString());
    }
}

添加Spring XML配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxrs="http://cxf.apache.org/jaxrs"
       xsi:schemaLocation="http://cxf.apache.org/jaxrs
       http://cxf.apache.org/schemas/jaxrs.xsd http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd"
       default-lazy-init="true">

    <!--
        spring整合CXF发布基于RESULT风格服务
        1.服务地址
        2.服务类
        服务完整访问地址:http:localhost:8083/server/userService/user
    -->
    <jaxrs:server address="/userService">
        <jaxrs:serviceBeans>
            <bean class="com.diego.service.impl.IUserServiceImpl"/>
        </jaxrs:serviceBeans>
    </jaxrs:server>

</beans>

添加web.xml配置:

<servlet>
  <servlet-name>cxfServlet</servlet-name>
  <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>cxfServlet</servlet-name>
  <url-pattern>/server/*</url-pattern>
</servlet-mapping>

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

客户端:

添加实体类:

package com.diego.rs.entity;

import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;

/**
 * 基于RESULT风格的webService,客户端与服务端通讯可以传递xml数据、json数据
 * @XmlRootElement 指定对象序列化为XML或JSON数据时  根节点的名称
 * xml:
 *      <User>
 *          <id></id>
 *          <userName></userName>
 *          <city></city>
 *      </User>
 *
 * json:
 *  {"User":{"id":"1","userName":"","city":""}}
 */
@XmlRootElement(name = "User")
public class User {

    private String id;
    private String userName;
    private String city;

    public String getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", userName='" + userName + '\'' +
                ", city='" + city + '\'' +
                '}';
    }
}

测试类:

package com.diego.rs;

import com.diego.rs.entity.User;
import org.apache.cxf.jaxrs.client.WebClient;
import org.testng.annotations.Test;

import javax.ws.rs.core.MediaType;


public class Client {

    @Test
    public void test1(){
        User user = new User();
        user.setId("1");
        user.setCity("aaa");
        user.setUserName("c");
        WebClient.create("http://localhost:8083/server/userService/user")
                //指定请求的数据格式为XML
                .type(MediaType.APPLICATION_XML)
                .post(user);
    }

    @Test
    public void test2(){
        User user = WebClient.create("http://localhost:8083/server/userService/user/1")
                //指定请求的数据格式为JSON
                    .type(MediaType.APPLICATION_JSON)
                .get(User.class);
        System.out.println(user.toString());
    }
}

猜你喜欢

转载自blog.csdn.net/wxwsfl/article/details/88691584