web服务java JAX-RS中的多个参数



我正在编写Jersey RESTful web服务。我所有的方法,比如添加,删除,获取工作。但我想创建一个展示什么书的用户借用什么的方法。

public class UserManagement {
private Map<Long, UserMaker> userMaker = DataBase.getUserMaker();
public UserManagement(){           //id , name, surname, nin, status of book
userMaker.put((long) 1, new UserMaker(1,"John", "Castles", 12345,0)); 
public UserMaker hireBook(UserMaker user, BookMaker book){         // method who update status hiring book  , if 0 that means book is rented
if(user.getId() <= 0){
return null;
}
book.setStatus((int) user.getId());                //
user.setWhatIhave((int) (book.getId()));          // convert int to long
userMaker.put(user.getId(), user);
return user;
}  }

现在我想使用多参数的方法

@Path("/user")
public class UserCRUD {
UserManagement userManagementWS = new UserManagement();
@PUT
@Path("/{idU}/{idB}")             
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public UserMaker hireBook(
@PathParam("idU") long idU, UserMaker user,
@PathParam("idB") long idB, BookMaker book) {
user.setId(idU);
return userManagementWS.hireBook(user, book);             //borrowing books
} }

我有错误,但一切看起来都很好:

Method public project.emil.lib.model.UserMaker project.emil.lib.resources.UserCRUD.hireBook(long,project.emil.lib.model.UserMaker,long,project.emil.lib.model.BookMaker) on resource class project.emil.lib.resources.UserCRUD contains multiple parameters with no annotation. Unable to resolve the injection source.

有什么建议吗?:)

资源方法不能有多个实体参数。可以有多个@PathParam@QueryParam等,但在每个资源方法中只能有一个未注释的参数。

3.3.2.1实体参数未注释的参数值@FormParam或第3.2节中列出的任何注释,被称为实体参数的实体参数是从请求实体体映射而来的。实体实体和Java类型是实体提供者的责任,请参阅第4.2节。资源方法必须位于大多数是一个实体参数。

http://download.oracle.com/otn-pub/jcp/jaxrs-2_1-final-eval-spec/jaxrs-2_1-final-spec.pdf

您可以从资源方法中删除UserMaker user,并将用户id传递给userManagementWS.hireBook(idU, book)。然后通过userMaker.get(idU)从您的Map<Long, UserMaker>检索用户。https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#get-java.lang.Object-

但我建议你重组你的api。我发现这个链接内容丰富http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api.

最新更新