如何使用输入参数创建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中以下注释用于提取客户端发送的输入值。
- @PathParam
- @QueryParam
- @MatrixParam
- @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 ; }