У меня есть простая служба данных:Как передать параметр JsonSerializer?
@GET
public Data getData(@QueryParam("id") Long id) {
Data data = dataService.getData(id);
return data;
}
и соответствующий DataSerializer
, который реализует JsonSerializer<Data>
: DataSerializer
зарегистрирован в Джексон через:
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, джексон-жильный: баночка: 2.3.1
===================== обновленные = =========
ответ @ Андрее-я:
Потому что сама по себе мои данные уже содержатся различные региональные версии. , например:
Data helloData = dataService.get("hello");
helloData.getName(Locale.English) == "Hello";
helloData.getName(Locale.France) == "Bonjour";
helloData.getName(Locale.Germany) == "Hallo";
Я хочу, чтобы непосредственно передать локаль из URL в JsonSerializer, чтобы получить одну версию представления данных.
И там может быть другая версия (а не только локаль), поэтому наследование Data mix Locale не рассматривается.
Почему бы не сделать ваш класс данных локали известно: ввести класс LocaleData, который имеет то же поле данных, но транслирует переводимый материал? –
hi @@ andrei-i, я ответил в содержании. Благодарю. – smallufo