我有一个webservice实现,它验证请求并在响应中写入错误消息。响应不是所需的格式。
错误消息模板位于资源包属性文件中。
...
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,因为那时我失去了在属性文件中更改错误消息中变量顺序的能力。
答案 0 :(得分: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;
}
在此处阅读有关SubFormatPattern的Oracle文档: http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html#patterns
答案 1 :(得分:0)
您始终可以先将号码转换为String
。
getErrorMessage(key,"PLANT1", String.valueOf(9905005))
这应该有效。我怀疑消息格式化程序aauto根据您的语言环境检测到数字并将其格式化为一个。