如何使用输入参数创建Restful Web服务?

我正在创建宁静的Web服务,我想知道如何使用输入参数创建服务以及如何从Web浏览器调用它。

例如

@Path("/todo") public class TodoResource { // This method is called if XMLis request @PUT @Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) public Todo getXML() { Todo todo = new Todo(); todo.setSummary("This is my first todo"); todo.setDescription("This is my first todo"); return todo; } 

我可以使用http:// localhost:8088 / JerseyJAXB / rest / todo调用它

我想创建一个类似的方法

 @Path("/todo") public class TodoResource { // This method is called if XMLis request @PUT @Produces( {MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON}) public Todo getXML(String x, String y) { Todo todo = new Todo(); todo.setSummary(x); todo.setDescription(y); return todo; } 

在基于肥皂的Web服务的情况下,我会像这样调用它

HTTP://本地主机:8088 / JerseyJAXB /rest/待办事项X = ABC&Y = PQR?

但是我想知道如何使用rest来调用它,并且我可以传递参数,就像我在上面的例子中使用rest和jersey时所做的那样。

您可以。 尝试这样的事情:

 @Path("/todo/{varX}/{varY}") @Produces({"application/xml", "application/json"}) public Todo whatEverNameYouLike(@PathParam("varX") String varX, @PathParam("varY") String varY) { Todo todo = new Todo(); todo.setSummary(varX); todo.setDescription(varY); return todo; } 

然后使用此URL呼叫您的服务;
HTTP://本地主机:8088 / JerseyJAXB / REST / TODO /摘要/描述

JAX-RS中以下注释用于提取客户端发送的输入值。

  1. @PathParam
  2. @QueryParam
  3. @MatrixParam
  4. @FormParam

@PathParam URL语法

http:// localhost:7001 // rest / customers / 100 / Java4s

@QueryParam URL语法

http:// localhost:7001 / … / rest / customers?custNo = 100&custName = Java4s

@MatrixParam URL语法

http:// localhost:7001 / … / rest / customers; custNo = 100; custName = Java4s

@FormParam URL语法

如果我们有一个包含两个输入字段和提交按钮的HTML表单。 让客户输入这些详细信息并提交给RESTful Web服务。 然后,其余服务将使用此@FormParam注释提取这些详细信息。

如果需要查询参数,可以使用@QueryParam

 public Todo getXML(@QueryParam("summary") String x, @QueryParam("description") String y) 

但是你将无法从普通的网络浏览器(今天)发送PUT。 如果直接输入URL,则为GET。

从哲学上讲,这看起来应该是一个POST。 在REST中,您通常要么POST到公共资源, /todo ,该资源创建并返回新资源,要么PUT到特定标识的资源,如/todo/ ,以进行创建和/或更新。

小心。 为此你需要@GET(不是@PUT)。

你可以尝试这个…把参数作为:
你的浏览器中http:// localhost:8080 / WebApplication11 / webresources / generic / getText?arg1 = hello …

 package newpackage; import javax.ws.rs.core.Context; import javax.ws.rs.core.UriInfo; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PUT; import javax.ws.rs.QueryParam; @Path("generic") public class GenericResource { @Context private UriInfo context; /** * Creates a new instance of GenericResource */ public GenericResource() { } /** * Retrieves representation of an instance of newpackage.GenericResource * @return an instance of java.lang.String */ @GET @Produces("text/plain") @Consumes("text/plain") @Path("getText/") public String getText(@QueryParam("arg1") @DefaultValue("") String arg1) { return arg1 ; } @PUT @Consumes("text/plain") public void putText(String content) { } } 

另一种方法是获取UriInfo而不是所有的QueryParam

然后,您将能够根据代码中的需要获取queryParam

 @GET @Path("/query") public Response getUsers(@Context UriInfo info) { String param_1 = info.getQueryParameters().getFirst("param_1"); String param_2 = info.getQueryParameters().getFirst("param_2"); return Response ; }