CXF-RS入门实例详解

一. 创建两个maven jar项目


这里写图片描述

二 .编写服务器端 (RS_Server)

这里写图片描述

1. 导jar包 在pom.xml文件中写依赖的jar包

<dependencies>
        <!-- CXF RS开发 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>3.0.1</version>
        </dependency>

        <!-- 内置jetty服务器 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http-jetty</artifactId>
            <version>3.0.1</version>
        </dependency>

        <!-- log4j日志  -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
        </dependency>


        <!-- 发送json数据需要以下两个jar包 -->

         <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-extension-providers</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jettison</groupId>
            <artifactId>jettison</artifactId>
            <version>1.3.7</version>
        </dependency>
  </dependencies>

2. 编写一个实体类User 添加注解
package com.blueSky.domain;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="User")    //指定序列化对象的名字,服务器端实体类注解name属性值要和该名字一样
public class User {
    private Integer id;  
    private String name;
    private String gender;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", gender=" + gender + "]";
    }
}

3. 编写IUserService接口 添加注解

package com.blueSky.service;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

import com.blueSky.domain.User;
@Path("/userService")    //访问路径(/userService/)
public interface IUserService {
    /*
     * 添加数据
     * */
    @POST                           //添加操作
    @Path("/user")                  // 该方法访问路径为 /userService/user
    @Consumes({"application/xml","application/json"})     //该方法可以接收xml和json类型的数据   (mime类型)
    public void addUser(User user);
    /*
     * 删除数据
     * */
    @DELETE
    @Path("/user/{id}")
    @Consumes({"application/xml","application/json"})
    public void deleteUser(@PathParam("id") int uid);    //会把path中的id值作为实参传给形参uid
    /*
     * 修改数据
     * */
    @PUT
    @Path("/user")
    @Consumes({"application/xml","application/json"})
    public void updateUser(User user);

    /*
     * 查询所有数据
     * */
    @GET
    @Path("/user")
    @Produces({"application/xml","application/json"})    //可以返回xml,json类型的数据
    public List<User> findAllUser();

    /*
     * 查询一个数据
     * */
    @GET
    @Path("/user/{id}")
    @Consumes({"application/xml","application/json"})   //该方法既接收参数又返回参数 两个注解都要写
    @Produces({"application/xml","application/json"})
    public User findUser(@PathParam("id") Integer uid);  //会把path中的id值作为实参传给形参uid

}

4. 编写UserServiceImpl实现类

package com.blueSky.service.impl;

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

import com.blueSky.domain.User;
import com.blueSky.service.IUserService;

public class UserServiceImpl implements IUserService{
    /*
     * 添加数据
     * */
    public void addUser(User user){
        System.out.println(user.getName());
   System.out.println("添加用户....");
    }

    /*
     * 删除数据
     * */
    public void deleteUser(int id){
        System.out.println("删除用户"+id);
    }

    /*
     * 修改数据
     * */
    public void updateUser(User user){
        System.out.println("修改用户信息....");
    }


    /*
     * 查询所有数据
     * */
    public List<User> findAllUser(){
        //因为没有数据库,手动制作一些数据
        List<User> list = new ArrayList<User>();
        //创建第一个用户
        User user1 = new User();
        user1.setId(1);
        user1.setName("张三");
        user1.setGender("男");
        list.add(user1);
        //创建第二个用户
        User user2 = new User();
        user2.setId(2);
        user2.setName("李四");
        user2.setGender("男");
        list.add(user2);
        //返回结果list
        return list;
    }

    /*
     * 查询一个数据
     * */
    public User findUser(Integer id){
        //因为没有数据库,手动制作一些数据
        //创建第一个用户
        User user1 = new User();
        user1.setId(1);
        user1.setName("张三");
        user1.setGender("男");
        //创建第二个用户
        User user2 = new User();
        user2.setId(2);
        user2.setName("李四");
        user2.setGender("男");

        //返回结果list
        if(id==1){
            return user1;
        }else if(id==2){
            return user2;
        }else{
            return null;
        }
    }
}

5. 编写UserServer类 发布服务

package com.blueSky.server;

import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;

import com.blueSky.domain.User;
import com.blueSky.service.IUserService;
import com.blueSky.service.impl.UserServiceImpl;

public class UserServer {

    public static void main(String[] args) {
        //1.创建服务接口实现类对象
        IUserService userService = new UserServiceImpl();
        //2.创建bean工厂,并进行设置
        JAXRSServerFactoryBean jaxrsServerFactoryBean = new JAXRSServerFactoryBean();
        jaxrsServerFactoryBean.setResourceClasses(User.class);  //设置实体类
        jaxrsServerFactoryBean.setServiceBean(userService);     //设置服务类
        jaxrsServerFactoryBean.setAddress("http://127.0.0.1:9001");  //设置地址
        //3发布服务
        jaxrsServerFactoryBean.create();
    }
}

6. 浏览器访问进行测试
这里写图片描述
这里写图片描述
这里写图片描述

三 编写客户端(RS_Client)

使用web_client工具类
这里写图片描述
1.导jar包

pom.xml中写

   <!-- rs客户端  -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-client</artifactId>
            <version>3.0.1</version>
        </dependency>

        <!-- json转换相关 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-extension-providers</artifactId>
            <version>3.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jettison</groupId>
            <artifactId>jettison</artifactId>
            <version>1.3.7</version>
        </dependency>

2. 编写一个实体类

package com.blueSky.domain;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="User")    //指定序列化对象的名字,服务器端实体类注解name属性值要和该名字一样
public class User {
    private Integer id;  
    private String name;
    private String gender;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getGender() {
        return gender;
    }
    public void setGender(String gender) {
        this.gender = gender;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", gender=" + gender + "]";
    }
}

3. 编写请求服务类

package com.blueSky.Service;

import java.util.Collection;

import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;

import org.apache.cxf.jaxrs.client.WebClient;

import com.blueSky.domain.User;

public class UserService {

    public static void main(String[] args) {
        //accept 接收   type发送
        //添加用户
        User user1 = new User();
        user1.setName("客户端王五");
        WebClient.create("http://127.0.0.1:9001/userService/user")
        .type(MediaType.APPLICATION_XML)       // 发送给服务器的数据格式
        .post(user1);                         // post请求方式添加数据


        //删除用户
        WebClient.create("http://127.0.0.1:9001/userService/user/1")  //给参数
        .type(MediaType.APPLICATION_XML).delete();


        //查询所有用户 json格式
        Collection<? extends User> collection = WebClient
                .create("http://127.0.0.1:9001/userService/user")
                .accept(MediaType.APPLICATION_JSON)   //接收数据格式为json
                .getCollection(User.class);            //使用getCollection方法来接收集合数据  
        System.out.println(collection);


        //查询单个用户
        User user = WebClient
                .create("http://127.0.0.1:9001/userService/user/1") //给定参数
                .accept(MediaType.APPLICATION_JSON)    //接收数据格式为json
                .get(User.class);                      // User接收
        System.out.println(user);
    }   
}

4. 访问服务路径,进行测试

客户端控制台显示
这里写图片描述
服务器端控制台显示
这里写图片描述

zz

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值