2

我有一个 Web 服务实现,它验证请求并在响应中写入错误消息。响应不是所需的格式。

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

...

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 的方法,从那时起,我就无法在属性文件的错误消息中更改变量的顺序。

4

2 回答 2

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

于 2013-05-07T06:33:59.573 回答
0

您始终可以将数字转换为String第一个。

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

这应该有效。我怀疑消息格式化程序 aauto 会根据您的语言环境检测到该数字并将其格式化为一个。

于 2013-05-08T00:00:00.517 回答