Применение i18n к поддерживаемому Hibernate Spring Web API - PullRequest
0 голосов
/ 26 января 2020

У меня есть пара сущностей 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) {
      ...
  }
}
...