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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章