在泽西请求中获取客户端区域设置

时间:2012-09-03 10:51:20

标签: java jersey locale jax-rs

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

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

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

5 个答案:

答案 0 :(得分:10)

Locale locale = request.getLocale();

答案 1 :(得分:3)

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

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

然后从代码:

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

答案 2 :(得分:2)

客户端应设置Accept-Language header

答案 3 :(得分:1)

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

@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 )
{
   ...
}

答案 4 :(得分:0)

当user3774109回答时,请使用Accept-Language HTTP标头。尽管接口javax.servlet.http.HttpServletRequest用在Jersey实现中,但实际上实际上不是JAX-RS API的一部分。获取首选的接受语言的更干净的方法是:

@GET
@Produces("text/html")
@Path("/myrequest")
public Response myRequest(@Context HttpHeaders headers) {
    Locale locale = headers.getAcceptableLanguages().get(0);
    ...
}