10

在 Jersey (JAX-RS) 请求的上下文中获取客户端语言环境的最佳和更便携的方法是什么?我有以下代码:

@GET
@Produces("text/html")
@Path("/myrequest")
public Response myRequest(@Context HttpServletRequest request) {
    Locale locale = ...
}

请假设“请求”是由浏览器中的一些 javascript 代码发出的,通过调用window.location = ...;

4

5 回答 5

10

Locale locale = request.getLocale();

于 2012-09-03T12:51:02.977 回答
3

为此使用 HTTP 标头。要请求美国区域设置小数中的数值,您可以这样请求:

GET /metrics/007/size Accept-Language: en-US

然后从代码:

public Response myRequest(@Context HttpServletRequest request) {
Locale locale = request.getLocale();
...
}
于 2016-02-03T14:47:36.367 回答
2

客户端应设置Accept-Language标头

于 2012-09-03T12:55:06.280 回答
2

根据最终目标,可以通过不同方式获取语言/区域设置数据。根据问题,我认为最合适的解决方案是:

@GET
public Response myRequest( @Context HttpServletRequest request )
{
   Locale locale = request.getLocale();
   ...
}

另一种可能的替代方法是使用语言查询参数:

@GET
public Response myRequest( @QueryParam( "language" ) String language )
{
   ...
}

或者,“Accept-Language”标头参数:

@GET
public Response myRequest( @HeaderParam( "Accept-Language" ) String acceptLanguage )
{
   ...
}
于 2018-01-10T16:09:17.747 回答
0

正如 user3774109 回答的那样,使用Accept-LanguageHTTP 标头。尽管它在 Jersey 实现中使用,但该接口javax.servlet.http.HttpServletRequest实际上并不是 JAX-RS API 的一部分。获得首选接受语言的更简洁方法是:

@GET
@Produces("text/html")
@Path("/myrequest")
public Response myRequest(@Context HttpHeaders headers) {
    Locale locale = headers.getAcceptableLanguages().get(0);
    ...
}
于 2019-02-15T16:40:16.090 回答