我偶然发现了一个相当奇怪的问题。搜索没有给出任何答案,所以我想在这里问一下......
我正在创建一个与webservice(rest)通信的程序。在客户端,我有这个删除样本的方法:
public void remove(int id) throws UniformInterfaceException {
webResource.path(java.text.MessageFormat.format("{0}", new Object[]{id})).delete();
}
在服务器端:
@DELETE
@Path("{id}")
public void remove(@PathParam("id") Integer id) {
System.out.println("delete sample id = " + id);
super.remove(super.find(id));
}
现在,这似乎适用于所有ID< 1000(输出中显示id)。一旦它超过1000,由于某种原因似乎有一千个分离器在工作?这导致客户端出现以下错误:
com.sun.jersey.api.client.UniformInterfaceException: DELETE http://localhost:8080/myname/webresources/entities.samples/1,261 returned a response status of 404 Not Found
为什么它在URI中使用1,261而不是1261?或者我在某处犯了任何愚蠢的错误?
提前致谢。
答案 0 :(得分:3)
这里的问题是MessageFormat类使用区域设置来格式化数字。从javadoc(在顶部表的子格式创建列下),“NumberFormat.getIntegerInstance(getLocale())”。这包括一些区域设置的千位分隔符。请考虑以下事项:
java> MessageFormat.format("{0}", new Object[]{Integer.valueOf(999)})
String res0 = "999"
java> MessageFormat.format("{0}", new Object[]{Integer.valueOf(1000)})
String res1 = "1,000"
您可以选择在本例中使用MessageFormat更改为Integer.toString:
java> Integer id = 999
Integer id = 999
java> id.toString()
String res3 = "999"
java> id = 1000
Integer id = 1000
java> id.toString()
String res4 = "1000"