好的,所以这是服务器端的代码我只是对如何在客户端定义路径有疑问。 这是服务器上的方法
@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也可以是整数吗?
答案 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.
为了安全起见,请将index
和amount
作为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的末尾。表示您正在为产品订单提供更新的表示。