У меня есть пара сущностей Hibernate, хранящихся в БД, которые я хочу интернационализировать. Например, моя сущность "страна":
@Table(name = "country")
public class Country {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "name")
private String name;
}
Теперь я хочу улучшить API, который обрабатывает поиск стран для возврата записи страны на соответствующем языке. (например, добавив ?lang=en
к запросу)
Для этого у меня есть контроллер страны:
@RestController
@Api(tags = "Country")
public class CountryController {
private final CountryDao countryDao;
public CountryController(CountryDao countryDao) {
this.countryDao = countryDao;
}
@ApiOperation(value = "View a list of available countries.")
@GetMapping(path = "/entity/countries")
public Iterable<Country> getCountries() {
return countryDao.findAll();
}
}
Как бы я это сделал?
Я думал добавить новая таблица i18n
, которая содержит ключи сообщений с доступными переводами. Но в конце я все же хотел бы, чтобы API возвращал простую запись JSON, содержащую только название страны, в которой заинтересован пользователь, без необходимости вложения всех доступных переводов.
Я пытался использовать AttributeConverter
пометить поля на объекте @Convert(converter = I18nConverter.class)
и найти в таблице i18n
соответствующий ключ, но при таком подходе у меня нет доступа к указанному языку в запросе ...
public class I18nConverter implements AttributeConverter<String, String> {
private final I18nEntryDao i18nEntryDao;
@Override
public String convertToDatabaseColumn(String attribute) {
...
}
@Override
public String convertToEntityAttribute(String dbData) {
...
}
}