Tomcat忽略Accept-Language标头

时间:2017-11-21 19:57:11

标签: java tomcat

在我的Java应用程序中,我将默认系统区域设置(Locale.getDefault())设置为我的tomcat Web应用程序的HTTP请求的Accept-Language标头。 就我而言,这是de_DE

在服务器端,我尝试使用request.getLocale()获取区域设置。但我只得到一个空字符串。

如果我将Accept-Language设置为de,一切正常。

为什么de_DE无法作为Accept-Language标头工作?

修改

这是我的客户端代码:

HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
connection.setRequestProperty("Accept-Language", Locale.getDefault().toString());

这是我的服务器端代码:

request.getLocale().toString(); //empty string
request.getHeader("Accept-Language"); //"de_DE"

2 个答案:

答案 0 :(得分:2)

语言标签的正确格式是de-DE。用破折号,而不是下划线。

我想如果其他网络服务器更宽松并且接受de_DE是等效的,那么它不会令人惊讶,但Tomcat却没有。作为参考,Tomcat将此解析委托给Locale.forLanguageTag(),这清楚地表明它需要格式de-DE。

答案 1 :(得分:0)

正如kumesana指出的那样,Tomcat将使用Locale.forLanguageTag()将Accept-Language标头值转换为Locale。有一种相反的方法可以将Locale实例转换为预期的标头字符串:toLanguageTag()

我建议您使用此方法,而不是用下划线手动替换下划线,因此您的代码将如下所示:

connection.setRequestProperty("Accept-Language", Locale.getDefault().toLanguageTag());

相关问题