2013-05-10 28 views
0

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

我正在创建一个程序,与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)); 
} 

现在,这似乎与< 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?或者我在某个地方犯了什么愚蠢的错误?

在此先感谢。

+1

你为什么不只是调用将String.valueOf(ID),MessageFormat中似乎是这是一个开销 – hoaz 2013-05-10 18:22:54

回答

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"