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 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 findAll() {
        List users = new ArrayList();
        User user1 = new User();
        user1.setId(1);
        user1.setUsername("小明");
        user1.setCity("北京");

        List carList1 = new ArrayList();
        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;
    }

}

你可能感兴趣的:(WebService)