2012-12-04 268 views
25

我一直在嘗試理解使用Jersey的REST風格的Web服務中的@POST。我已經通過http://www.vogella.com/articles/REST/article.html瞭解相同的情況,並能夠獲得一些關於@POST的信息,但感到困惑和混亂。任何人都可以用一個簡單的例子來解釋@POST,或者分享一些相同的鏈接。REST風格的Web服務中的@POST

實施@POST通過TODO在上面的鏈接對象是不錯,但我希望通過一些其他簡單的例子來學習@POST,這樣我可以繼續開發自己複雜@POST例子。

幫助將是明顯的, 謝謝。

+0

您是否查看了http://en.wikipedia.org/wiki/POST_(HTTP)以獲得對該過程更基本的理解? – condit

+0

謝謝你......這對了解這個話題真的很有幫助。如果您分享有關RESTful Web服務安全性的信息將非常有幫助。我想創建安全的Web服務。任何鏈接或教程,將提供所需的信息清楚.. ?? –

+2

檢查此鏈接 http://docs.oracle.com/cd/E19798-01/821-1841/6nmq2cp1v/index.html。 它有一個清晰的解釋關於寧靜的網絡服務 – 2014-02-25 12:29:47

回答

18

REST Web服務(HTTP://本地主機:8080 /你的應用程序內/ REST /數據/後)

package com.yourorg.rest; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

    @Path("/data") 
public class JSONService { 

    @POST 
    @Path("/post") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response createDataInJSON(String data) { 

     String result = "Data post: "+data; 

     return Response.status(201).entity(result).build(); 
    } 

客戶發個帖子:

package com.yourorg.client; 

import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 

public class JerseyClientPost { 

    public static void main(String[] args) { 

    try { 

     Client client = Client.create(); 

     WebResource webResource = client.resource("http://localhost:8080/your-app/rest/data/post"); 

     String input = "{\"message\":\"Hello\"}"; 

     ClientResponse response = webResource.type("application/json") 
      .post(ClientResponse.class, input); 

     if (response.getStatus() != 201) { 
      throw new RuntimeException("Failed : HTTP error code : " 
       + response.getStatus()); 
     } 

     System.out.println("Output from Server .... \n"); 
     String output = response.getEntity(String.class); 
     System.out.println(output); 

     } catch (Exception e) { 

     e.printStackTrace(); 

     } 

    } 
} 
+0

嗨何塞,這真的很好,樂於助人。你能否給我提供DELETE和PUT註釋的示例代碼。所以我可以繼續創建一些更復雜的代碼。謝謝 –

+0

很好的例子。工作正常。 –

23

請在下面找到例子,它可以幫助你

package jersey.rest.test; 

import javax.ws.rs.DELETE; 
import javax.ws.rs.GET; 
import javax.ws.rs.HEAD; 
import javax.ws.rs.POST; 
import javax.ws.rs.PUT; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.core.Response; 

@Path("/hello") 
public class SimpleService { 
    @GET 
    @Path("/{param}") 
    public Response getMsg(@PathParam("param") String msg) { 
     String output = "Get:Jersey say : " + msg; 
     return Response.status(200).entity(output).build(); 
    } 

    @POST 
    @Path("/{param}") 
    public Response postMsg(@PathParam("param") String msg) { 
     String output = "POST:Jersey say : " + msg; 
     return Response.status(200).entity(output).build(); 
    } 

    @POST 
    @Path("/post") 
    //@Consumes(MediaType.TEXT_XML) 
    public Response postStrMsg(String msg) { 
     String output = "POST:Jersey say : " + msg; 
     return Response.status(200).entity(output).build(); 
    } 

    @PUT 
    @Path("/{param}") 
    public Response putMsg(@PathParam("param") String msg) { 
     String output = "PUT: Jersey say : " + msg; 
     return Response.status(200).entity(output).build(); 
    } 

    @DELETE 
    @Path("/{param}") 
    public Response deleteMsg(@PathParam("param") String msg) { 
     String output = "DELETE:Jersey say : " + msg; 
     return Response.status(200).entity(output).build(); 
    } 

    @HEAD 
    @Path("/{param}") 
    public Response headMsg(@PathParam("param") String msg) { 
     String output = "HEAD:Jersey say : " + msg; 
     return Response.status(200).entity(output).build(); 
    } 
} 

測試你可以像使用RESTClient實現任何工具(http://code.google.com/p/rest-client/)