WebService CXF-RS技術之@Pathparam與@Queryparam註解區別

兩個@Path和@Get相同的方法,

其中一個使用@Pathparam時,WebService可以有效區分兩者的區別,認爲是兩個不同的方法

而其中一個使用@Queryparam,WebService無法區別兩者的區別,且會認爲這是兩個相同的方法

具體示例代碼及註解如下:

此爲接口類

package cn.itcast.cxf.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 javax.ws.rs.QueryParam;
import cn.itcast.cxf.domain.User;

//創建服務接口
//設置接口路徑,因爲applicationCcontext中的路徑重合,所以註釋掉
//@Path("/userService")
//設置生產者,即出來的數據路徑,因爲每個方法都要設置具體的生產者,所以也註釋掉
//@Produces("*/*")
public interface IUserService {
    //設置post方法:增加
    @POST
    //設置方法路徑
    @Path("/user")
    //設置入參類型:消費者:參數是數組
    @Consumes({"application/xml","application/json"})
    public void post(User user);

    //設置delete方法:刪除
    @DELETE
    //參數可以用路徑參數的方式注入
    @Path("/user/{id}")
    @Consumes({"application/xml","application/json"})
    public void delete(@PathParam("id") Integer id);

    //設置put方法:修改
    @PUT
    @Path("/user")
    @Consumes({"application/xml","application/json"})
    public void update(User user);

    //設置get方法:全查詢
    @GET
    @Path("/user")
    @Produces({"application/xml","application/json"})
    public List<User> findAll();


    //設置get方法:根據id查詢,使用@PathParam傳參
    @GET
    @Path("/user/{id}")
    @Produces({"application/xml","application/json"})
    @Consumes({"application/xml","application/json"})
    public User findByIdPathParam(@PathParam("id") Integer id); 


    //設置get方法:根據id查詢,使用@QueryParam傳參
    //★★★???使用Queryparam時,只有把路徑名稱@Path改爲users,才能訪問,而使用@PathParam時,則不需要改變路徑名稱@Path,仍可用/user
    //因爲當使用@Queryparam時,findAll和findById兩個方法都是一樣的路徑http://localhost:9995/cxf_rs_spring/services/userService/user
    //只不過findById的路徑後面多加了一個參數http://localhost:9995/cxf_rs_spring/services/userService/user?id=1,
    //這個參數並不能算路徑的一部分,且訪問方式都是get,那麼webService會認爲它們是同一個方法,

    //而使用@PathParam時,因爲訪問時要在路徑後加上參數/1,localhost:9995/cxf_rs_spring/services/userService/user/1
    //這個參數構成了路徑的一部分,所以使得findById的訪問路徑與findAll的訪問路徑有所區別,webService認爲它們不是同一個方法,所以不要修改路徑@Path爲users
    @GET
    @Path("/users")
    @Produces({"application/xml","application/json"})
    @Consumes({"application/xml","application/json"})
    public User findByIdQueryParam(@QueryParam("id") Integer id);   
}

此爲實現類:

package cn.itcast.cxf.service;

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

import cn.itcast.cxf.domain.Car;
import cn.itcast.cxf.domain.User;


public class UserServiceImpl implements IUserService {

    public void post(User user) {
        System.out.println(user+"執行保存方法成功");
    }

    public void delete(Integer id) {
        System.out.println(id+"執行刪除方法成功");
    }

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

    public List<User> findAll() {
        List<User> users = new ArrayList<User>();
        User user1 = new User();
        user1.setId(1);
        user1.setUsername("小明");
        user1.setCity("北京");

        List<Car> carList1 = new ArrayList<Car>();
        Car car1 = new Car();
        car1.setId(101);
        car1.setCarName("保時捷");
        car1.setPrice(1000000d);
        carList1.add(car1);
        Car car2 = new Car();
        car2.setId(102);
        car2.setCarName("寶馬");
        car2.setPrice(400000d);
        carList1.add(car2);
        user1.setCars(carList1);

        users.add(user1);

        User user2 = new User();
        user2.setId(2);
        user2.setUsername("小麗");
        user2.setCity("上海");
        users.add(user2);

        return users;   }

    public User findById(Integer id) {
        if (id == 1) {
            User user1 = new User();
            user1.setId(1);
            user1.setUsername("小明");
            user1.setCity("北京");
            return user1;
        }
        return null;
    }

    @Override
    public User findByIdPathParam(Integer id) {
        if (id == 1) {
            User user1 = new User();
            user1.setId(1);
            user1.setUsername("小明");
            user1.setCity("北京");
            return user1;
        }
        return null;
    }

    @Override
    public User findByIdQueryParam(Integer id) {
        if (id == 1) {
            User user1 = new User();
            user1.setId(1);
            user1.setUsername("小明");
            user1.setCity("北京");
            return user1;
        }       return null;
    }

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