基于HTTP请求getLocale的货币抛出IllegalArgumentException

时间:2018-06-30 00:14:22

标签: java servlets illegalargumentexception

我试图基于servlet中的语言环境获取货币符号。

我尝试执行以下操作,但是它抛出了IllegalArgumentException

Currency.getInstance(request.getlocale())

语言环境的语言为“ en”,但国家/地区值为空。

如何获取语言环境的货币符号,货币代码?

1 个答案:

答案 0 :(得分:1)

在没有国家/地区的情况下要求货币是没有意义的。

在您的问题中,“英语”的货币是什么?可能是USD(US),AUD(Australia),UKP(United Kingdom),EUR(Ireland),CAD(Canada)等,等等。换句话说,在不知道国家的情况下,您无法选择货币,并且在实际上,货币只取决于国家,而不会取决于语言。国家/地区采用一种官方货币,但可以使用多种语言,例如在加拿大,语言环境为fr_CAen_CA

此外,在Javadoc中(我的重点)也清楚地阐明了这一点:

public static Currency getInstance​(Locale locale)
     

返回给定语言国家的Currency实例。语言环境的语言和变体组件将被忽略。结果会随时间变化,因为国家/地区会更改其货币。例如,对于欧洲货币联盟的原始成员国,该方法返回的是旧的本国货币(直到2001年12月31日),欧元返回的是2002年1月1日(即各自国家的当地时间)。

     

对于没有货币的地区(例如南极洲),该方法返回null。

     

参数:

     

语言环境-需要其 国家 货币实例的语言环境

     

返回:

     

给定语言环境的国家的Currency实例,或者为null   抛出:

     

NullPointerException-如果语言环境为空

     

IllegalArgumentException-如果给定语言环境的国家/地区不是受支持的ISO 3166国家/地区代码。