兩個@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;
}
}