如何创建带输入参数的 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;
        }

如果是基于 soap 的 Web 服务,我会像这样调用它

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

但我想知道如何使用 rest 调用它,以及当我使用 rest 和 jersey 时,我是否可以像在上面的示例中那样传递参数。

原文由 SSG 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 631
2 个回答

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

 @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

原文由 perissf 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

但是您将无法从普通网络浏览器发送 PUT(今天)。如果您直接输入 URL,它将是一个 GET。

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

原文由 dbreaux 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题