Я пытался использовать AcceptHeaderLocaleResolver
в своем приложении. Я сделал много поисков, но я все еще не понимаю, как правильно его использовать. На данный момент работает следующий код:
Класс HeaderLocaleResolver:
@Component
class HeaderLocaleResolver {
private val acceptHeaderResolver = AcceptHeaderLocaleResolver()
init {
acceptHeaderResolver.defaultLocale = Locale.ENGLISH
}
fun getLocale(request: HttpServletRequest): Locale{
return acceptHeaderResolver.resolveLocale(request)
}
}
Класс моего контроллера покоя:
@RequestMapping("/rest/report")
@RestController
class PrinterController(private val printerService: PrinterService,
private val localeResolver: HeaderLocaleResolver) {
@PostMapping("/{folder}/{templateName}")
fun printReport(request: HttpServletRequest,
@PathVariable("folder") folder : String,
@PathVariable("templateName") templateName :String,
@RequestParam("doctype") doctype: DocumentType,
@RequestBody data: String) : ResponseEntity<InputStreamResource> {
val locale = localeResolver.getLocale(request)
val printedReport = printerService.printReport(folder, templateName, doctype, data, locale)
return ResponseEntity.ok().contentType(printedReport.mediaType)
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; fileName=" + printedReport.filename)
.body(InputStreamResource(ByteArrayInputStream(printedReport.content)))
}
}
На данный момент это работает нормально, но я не понимаю, действительно ли я должен использовать класс AcceptHeaderLocaleResolver
таким образом? Я прочитал множество постов, в которых показано, как переопределить конфигурацию по умолчанию LocalChangeInterceptor
, но мне кажется, что этому классу нужен параметр URL, который содержит параметр "lang", а затем он разрешает использование этого параметра, но я хочу сделать это просто использовать заголовок. Есть ли способ определить перехватчик, который читает только из заголовков язык и позволяет вам получить доступ к этому значению, возможно, через класс LocaleContextHolder
?
Кажется, что во всех предыдущих постах / вопросах не хватает кода Я попробовал почти все из них, в результате я получил неработающий код или исключения.