我偶然发现了一个相当奇怪的问题。搜索没有给出任何答案,所以我想在这里提问...

我正在创建一个与Web服务通信的程序(其余)。在客户端,我有此方法可删除样本:

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));
}


现在,这似乎适用于所有
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中使用1261而不是1261?还是我在某个地方犯了任何愚蠢的错误?

提前致谢。

最佳答案

这里的问题是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"

10-01 13:50