Java complexerestfulget查询
我知道如何使用ID进行GET和pull之类的查询,在本例中为“1”,但假设您希望搜索一本包含2个变量而不是1的书。这仍然可以通过GET完成吗?无需担心。我找到了我的答案,密码是:Java complexerestfulget查询,java,rest,tomcat,get,uri,Java,Rest,Tomcat,Get,Uri,我知道如何使用ID进行GET和pull之类的查询,在本例中为“1”,但假设您希望搜索一本包含2个变量而不是1的书。这仍然可以通过GET完成吗?无需担心。我找到了我的答案,密码是: @GET @Produces("application/json") @Path("/network/{id: [0-9]+}/{nid}") public User getUserByNetworkId(@PathParam("id") int id, @PathParam("nid"
@GET
@Produces("application/json")
@Path("/network/{id: [0-9]+}/{nid}")
public User getUserByNetworkId(@PathParam("id") int id, @PathParam("nid") String networkId) {
Query q = em.createQuery("SELECT u FROM User u WHERE u.networkId = :id AND u.networkUserId = :nid");
q.setParameter("id", id);
q.setParameter("nid", networkId);
return (User) q.getSingleResult();
}
别客气。我找到了我的答案,密码是:
@GET
@Produces("application/json")
@Path("/network/{id: [0-9]+}/{nid}")
public User getUserByNetworkId(@PathParam("id") int id, @PathParam("nid") String networkId) {
Query q = em.createQuery("SELECT u FROM User u WHERE u.networkId = :id AND u.networkUserId = :nid");
q.setParameter("id", id);
q.setParameter("nid", networkId);
return (User) q.getSingleResult();
}
常用的方法是将参数作为查询字符串参数传递。。。但是你可以让它们作为url的一部分 e、 g.图书/搜索/arg1/arg2
就我个人而言,我更喜欢查询字符串方法。常见的方法是将参数作为查询字符串参数传递。。。但是你可以让它们作为url的一部分 e、 g.图书/搜索/arg1/arg2
就我个人而言,我更喜欢查询字符串方法。您可以更改URL中的标识符,以允许ID的分隔列表:
GET /books/1+2
这将使您的URL保持整洁,并遵循REST的精神,即URL标识资源。另一个好处是,您可以使用单个绑定来处理URL中任意数量的ID
@GET
@Produces("application/json")
@Path("/books/{ids}")
public Books getBooks(@PathParam("ids") String ids) {
Books books = new Books();
for (String id: ids.split("+")) {
books.add(bookRepository.findById(id))
}
return books;
}
此方法可以处理多个场景:
GET /books/1
GET /books/2
GET /books/1+2
GET /books/1+2+3
您可以更改URL中的标识符,以允许ID的分隔列表:
GET /books/1+2
这将使您的URL保持整洁,并遵循REST的精神,即URL标识资源。另一个好处是,您可以使用单个绑定来处理URL中任意数量的ID
@GET
@Produces("application/json")
@Path("/books/{ids}")
public Books getBooks(@PathParam("ids") String ids) {
Books books = new Books();
for (String id: ids.split("+")) {
books.add(bookRepository.findById(id))
}
return books;
}
此方法可以处理多个场景:
GET /books/1
GET /books/2
GET /books/1+2
GET /books/1+2+3
我们可以讨论两种查询
- 由服务器构造的简单查询 这些查询由服务器构造并传递给URI,因此客户端与它们无关,因为它从不解析URI。(REST客户端遵循链接并使用链接的语义注释,例如链接关系来决定选择哪个链接。-HATEOAS约束)因此,您可以使用任何想要的解决方案,对于如何构建URI没有任何约束。(URI必须标识资源,因此一个URI不能属于多个资源。URI映射到资源而不是操作,因此,如果您希望具有人类可读的URI,则它们可能只包含名词而不包含动词。)
- 由客户端构造的即席查询 通过这种查询,您必须使用URI模板并用一些语义注释参数(可能通过使用依赖于应用程序的vocab)。如果超出URI模板的能力,则需要标准查询语言(例如SQL)和查询约束的标准描述格式(目前afaik不可用,但可以是带有RDF语义注释的扩展模板语言)
- 您所说的是一本由两个参数标识的书。在这种情况下,结果将包含单个项目资源的表示,您可以有如下内容:
或/books/x:1+y:2
或/books/x:1/y:2
。但是识别一本有两个参数的书对我来说没有意义/books?x=1&y=2
- 如果您想在响应中获得多本书,那么我们讨论的是减少一个集合资源的映射。您可以使用与单个项目资源所述相同的URI:
或/books/x:1+y:2
或/books/x:1/y:2
/books?x=1&y=2
您可以对如何区分集合和项目有一个约定,例如
/books?x=1&y=2
可以表示缩小集合,而/books/x:1+y:2
可以表示标识单个项目。但那部分取决于你。Ofc最好对此有一个约定,因为在服务器上编写URI生成和路由逻辑更容易。我们可以讨论两种查询
- 由服务器构造的简单查询 这些查询由服务器构造并传递给URI,因此客户端与它们无关,因为它从不解析URI。(REST客户端遵循链接并使用链接的语义注释,例如链接关系来决定选择哪个链接。-HATEOAS约束)因此,您可以使用任何想要的解决方案,对于如何构建URI没有任何约束。(URI必须标识资源,因此一个URI不能属于多个资源。URI映射到资源而不是操作,因此,如果您希望具有人类可读的URI,则它们可能只包含名词而不包含动词。)
- 由客户端构造的即席查询 通过这种查询,您必须使用URI模板并用一些语义注释参数(可能通过使用依赖于应用程序的vocab)。如果超出URI模板的能力,则需要标准查询语言(例如SQL)和查询约束的标准描述格式(目前afaik不可用,但可以是带有RDF语义注释的扩展模板语言)
- 您所说的是一本由两个参数标识的书。在这种情况下,结果将包含单个项目资源的表示,您可以有如下内容:
或/books/x:1+y:2
或/books/x:1/y:2
。但是识别一本有两个参数的书对我来说没有意义/books?x=1&y=2
- 如果您想在响应中获得多本书,那么我们讨论的是减少一个集合资源的映射。您可以使用与单个项目资源所述相同的URI:
或/books/x:1+y:2
或/books/x:1/y:2
/books?x=1&y=2