2

我有一个webservice实现,它验证请求并在响应中写入错误消息。回应不符合要求的格式。用逗号格式化Java资源包

错误消息模板位于资源束属性文件中。

...

key=Plant name {0} Plant Id {1}.

...

这是错误信息验证后,我得到的。

Plant name PLANT1 Plant Id 9,905,005.

但期望的输出是与出逗号的数值变量。

Plant name WPLANT Plant Id 9905005.

这里是我的代码。

private String getErrorMessage(String messageKey, Object... args) { 
    ResourceBundle messages = ResourceBundle.getBundle("ErrorMessageResourceBundle"); 
    MessageFormat formatter = new MessageFormat(""); 
    formatter.applyPattern(messages.getString(messageKey)); 
    String output = formatter.format(args); 
    return output; 
} 

我正在用下面的键和变量调用这个方法。

... 
getErrorMessage(key,"PLANT1",9905005) 
... 

如何更改此代码以获得所需的输出?我更喜欢一个方法不包含%s,%d,因为此后我无法更改属性文件中错误消息中变量的顺序。

回答

3

您可以使用子格式。 例子:

MessageFormat formatter = new MessageFormat("{0} {1,number,###0}"); 

因此,代码会是这样:

private String getErrorMessage(String messageKey, Object... args) { 
    ResourceBundle messages = ResourceBundle.getBundle("ErrorMessageResourceBundle"); 
    MessageFormat formatter = new MessageFormat("{0} {1,number,###0}"); 
    formatter.applyPattern(messages.getString(messageKey)); 

    String output = formatter.format(args); 
    return output; 
} 

阅读的Oracle文档大约SubFormatPattern这里: http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html#patterns

+0

感谢您的回答。但它仍然用**逗号打印输出**。 – ravindrab 2013-05-07 16:36:39

0

你可以随时将数字转换为String第一。

getErrorMessage(key,"PLANT1", String.valueOf(9905005)) 

这应该有效。我怀疑消息格式化程序aauto会根据您的区域设置检测数字并将其格式化为一个。