【发布时间】:2014-05-03 07:29:54
【问题描述】:
我有一个简单的数据服务:
@GET
public Data getData(@QueryParam("id") Long id) {
Data data = dataService.getData(id);
return data;
}
还有一个匹配的 DataSerializer 实现 JsonSerializer<Data> :
DataSerializer 通过以下方式注册到 Jackson:
simpleModule.addSerializer(Data.class , dataSerializer);
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(simpleModule);
效果很好。
但是今天想再添加一个Locale参数,希望DataSerializer能输出对应的内容:
@GET
public Data getData(@QueryParam("id") Long id , @QueryParam("locale") Locale locale)
“Data”本身包含各种语言环境变化,我希望得到分配的语言环境输出。
但是当我从参数中获取locale 时,我不知道如何将locale 值传递给DataSerializer ...
有没有办法做到这一点?
除了这个解决方案:
Data data = dataService.getData(id.get() , locale);
这不是我想要的。
似乎ThreadLocal 是实现这一目标的唯一方法,但我觉得那很难看。还有其他可行的解决方案吗?
谢谢。
环境:dropwizard-0.7.0-rc2,jackson-core:jar:2.3.1
======================更新==========
回复@andrei-i:
因为我的数据本身已经包含各种语言环境版本。 例如:
Data helloData = dataService.get("hello");
helloData.getName(Locale.English) == "Hello";
helloData.getName(Locale.France) == "Bonjour";
helloData.getName(Locale.Germany) == "Hallo";
我想直接将区域设置从 URL 传递给 JsonSerializer ,以获取数据呈现的一个版本。
并且“可能”有其他版本(不仅仅是语言环境),因此不考虑继承数据混合语言环境。
【问题讨论】:
-
为什么不让你的 Data 类感知区域设置:引入一个 LocaleData 类,它与 Data 具有相同的字段,但翻译可翻译的内容?
-
嗨@@andrei-i,我在内容中回复了。谢谢。
标签: java jackson jax-rs dropwizard jsonserializer