2011-09-22 95 views
14

我正在創建寧靜的Web服務,我想知道如何使用輸入參數創建服務,以及如何從Web瀏覽器調用它。如何使用輸入參數創建Restful 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; 
     } 

的方法在基於SOAP的Web服務,我將調用情況它是這樣的

http://localhost:8088/JerseyJAXB/rest/todo?x=abc&y=pqr

但我想知道如何使用rest來調用它,並且還可以傳遞參數,因爲我在上面的示例中使用了休息和球衣時的參數。

回答

34

您可以。 嘗試類似這樣:

@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://localhost:8088/JerseyJAXB/rest/todo/summary/description

2

要小心。爲此,您需要@GET(而不是@PUT)。

10

如果您需要查詢參數,請使用@QueryParam

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

但是,您將無法從簡單的Web瀏覽器(今天)發送PUT。如果您直接輸入網址,它將是一個GET。

從哲學上講,這看起來應該是一個POST,但是。在REST中,您通常會POST到通用資源/todo,其中該資源會創建並返回新資源,或者您可以PUT到專門標識的資源(例如/todo/<id>)以進行創建和/或更新。

+1

這個答案最好的地址原始問題中提到的URL參數。另一個問題是,參數或路徑元素是否更適合此目的。 –

+0

太棒了!這對我有效。謝謝! – Najeeb

10

JAX-RS以下註解提取客戶端發送的輸入值。

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

@PathParam URL語法

http://localhost:7001//REST /客戶/ 100/Java4s

@QueryParam URL語法

http://localhost:7001/ .../rest/customers?custNo = 100 & CUSTNAME = Java4s

@MatrixParam URL語法

http://localhost:7001/ .../REST /客戶; custNo = 100; CUSTNAME = Java4s

@FormParam URL語法

如果我們有一個HTML表單,它有兩個輸入字段並提交按鈕。讓客戶端輸入這些詳細信息並提交給RESTful Web服務。然後剩下的服務將通過使用這個@FormParam註解來提取這些細節。

0

你可以試試這個...把參數爲:
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) { 





    } 
} 
0

另一種方式做的就是在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 ; 

} 
相關問題