2012-12-04 214 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/)