在Jersey(JAX-RS)请求的上下文中获取客户端区域设置的最佳和更便携的方法是什么?我有以下代码:
@GET
@Produces("text/html")
@Path("/myrequest")
public Response myRequest(@Context HttpServletRequest request) {
Locale locale = ...
}
请假设“请求”是通过浏览器中的某些javascript代码调用window.location = ...;
答案 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);
...
}