Это старый вопрос, но вот что вы можете сделать, если хотите, чтобы Spring действительно создала для вас URI.
@RestController
@RequestMapping("/api/v1")
class JobsController {
@PostMapping("/jobs")
fun createJob(@RequestParam("use-gpu") useGPU: Boolean?): ResponseEntity<Unit> {
val headers = HttpHeaders()
val jobId = "TBD id"
headers.location =
MvcUriComponentsBuilder
.fromMethodName(JobsController::class.java, "getJob", jobId)
.buildAndExpand(jobId)
.toUri()
return ResponseEntity(headers, HttpStatus.CREATED)
}
@GetMapping("/job/{jobId}")
fun getJob(@PathVariable jobId: String) = ... // fetch job
}
В этом примере (который написан на Kotlin, но похож на Java), базовый URI равен /api/v1
(определен в верхней части класса). Использование вызова MvcUriComponentsBuilder.fromMethodName
позволяет Spring определить правильный полный URI. (MvcUriComponentsBuilder
был добавлен в 4.0).
При создании приложений из различных фреймворков вам часто нужно обернуть существующие регистраторы, будь то log4j, JUL или JULI или что-то еще. Стандартным приложением для этого является Simple Logging Facade для Java (SLF4J) . Даже если вашему приложению не нужен SLF4J сейчас, вы можете позже добавить библиотеку, которая в нем нуждается, и это ваша лучшая надежда на один файл конфигурации в долгосрочной перспективе.
Помня об этом, вы должны придерживаться протоколирования пакетов который поддерживает SLF4J, но обычно это сводится к java.util.logging (JUL) или log4j Apache. Это было предметом споров в течение некоторого времени, и вы можете найти множество мнений с обеих сторон.
Лично я считаю, что жаль, что ведение журнала Java в этой ситуации , и Я'
Никого не уволили за выбор log4j.
Также проверьте slf4j.
log4j - это стандартный регистратор, который я использую. Вы можете настроить уровни ведения журнала и файлы журнала для каждого пакета, чтобы Hibernate, Spring и ваш код могли обращаться к собственным файлам журнала.
Hibernate уже использует SLF4J. Если я не ошибаюсь, текущая версия Spring полагается на общее ведение журнала, но в следующей версии также будет использоваться SLF4J. В любом случае, вы можете объединить все журналы через SLF4J (см. Раздел о jcl-over-slf4j.jar). Как только это будет сделано, вы можете выбрать любой из java.util.logging, log4j или logback в качестве базовой инфраструктуры ведения журнала.
Вообще говоря, ведение журнала Commons не требуется и плохой выбор для веб-приложений (и автономных приложений). Несколько хороших писем о том, почему:
Подумайте еще раз, прежде чем внедрять API общего журналирования.
Я использую API Apache Commons Logging с файлом конфигурации log4j (файл конфигурации log4j прост, понятен новичку и содержит множество примеров для работы. .
Я предпочитаю использовать API протоколирования commons, потому что он не зависит от файла конфигурации. Его можно настроить с помощью форматов файлов для любого количества популярных пакетов протоколирования.
Вот простая установка log4j, которая распечатает отладочную информацию для вашего собственные пакеты, уровень INFO для spring и hibernate и WARN для всего остального:
# Global logging configuration
log4j.rootLogger=WARN, stdout
log4j.category.org.mydomain.org=DEBUG
log4j.category.org.hibernate=INFO
log4j.category.org.springframework=INFO
# CONSOLE appender not used by default
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %-5p [%t] %c - %m%n