RESTful Web服务的客户端路径

时间:2013-01-12 13:12:46

标签: java rest service web

好的,所以这是服务器端的代码我只是对如何在客户端定义路径有疑问。 这是服务器上的方法

@Path("{index}/{product}/{amount}")
@PUT
@Produces("text/plain")
public String editTable (@PathParam("index") Integer index, @PathParam("product")     String product, @PathParam("amount") Integer amount)
{...}

现在在客户端

{url = new URL( "http://localhost:8080/OrderService/service/tableservice/"+num+"/"+product+"/"+amount);
.....}

/ “+ NUM +”/ “+产物+”/“+量);

这是正确的语法??

当产品成为字符串或者我会遇到问题时,num和amount也可以是整数吗?

2 个答案:

答案 0 :(得分:0)

如果要将任何@QueryParam映射到整数,请确保您正在处理以下事项:
来自Oracle文档上的link

If a query parameter exists in the query component of the request URI, then the value will be extracted and parsed as a 32–bit signed integer and assigned to the method parameter. If the value cannot be parsed as a 32–bit signed integer, then an HTTP 400 (Client Error) response is returned.

为了安全起见,请将indexamount作为String。在服务中将它们解析为Integer并处理NumberFormatException而不是HTTP 400。

答案 1 :(得分:0)

如果产品名称中包含“不安全”的网址字符,则会遇到问题。情况可能就是这样。为了解决这个问题,您可以 对该名称进行编码,然后再将其添加到网址中。

但是 我认为您应该首先重新考虑您的PATH定义。一个好的资源端点应该唯一地识别它。但在您的情况下,您在URL中包含amount字段!这意味着,根据订购产品的人,资源URL正在发生变化:

客户A订购2个Furbies:

/OrderService/service/tableservice/9/Furbies/2

客户B订购1个Furbie

/OrderService/service/tableservice/9/Furbies/1

但在这两种情况下,顾客都试图订购同样的东西 - 一个Furbie!这不是RESTful。相反,您应该定义唯一的资源端点,然后将附加订单信息作为附加数据发送。例如:

public class Order {
    private Integer productId;
    private Integer amount;
}

@PUT
@Path("/{productId}/orders")
@Produces("text/plain")
public String updateOrder(@PathParam("productId"), Order order) { ... }

您会注意到我也删除了索引字段,如果绝对需要,您可以重新添加。您会注意到我还添加了一个orders后缀到URL的末尾。表示您正在为产品订单提供更新的表示。