У меня проблемы с настройкой следующего простого контроллера для правильной работы с Spring Framework 5.2 и Springboot 2.2 с Kotlin 1.3.50. Это простой FileServerController, который обслуживает файлы ниже ~, но я, кажется, получаю двойные вызовы контроллера, а mime-тип возвращаемого файла всегда равен application / json, даже когда я его явно устанавливаю. Если я не верну XML-файлы с правильным MIME-типом, я не смогу заставить браузер выполнять XSL-преобразования на нем. Я несколько уверен (но не уверен), что не-котлинская версия будет работать. Может ли кто-то предложить что-то еще для меня, чтобы попробовать. Большое спасибо.
@Controller
class FileServerController {
@RequestMapping(value = ["/**"])
fun getFile(request: HttpServletRequest, response: HttpServletResponse): FileSystemResource {
var fileName = request.servletPath
val HOME = System.getenv("HOME")
println("Requested ${fileName}")
fileName = "${HOME}${fileName}"
val file = File(fileName)
if (file.canRead()) {
println("Serving ${fileName}")
if(fileName.endsWith(".xml")) {
response.contentType = "text/xml"
} else if(fileName.endsWith(".xslt")) {
response.contentType = "application/xslt+xml"
}
return FileSystemResource(file)
} else {
println("Couldn't find ${fileName}")
throw NotFoundException(fileName)
}
}
}
Зависимости в моем pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
</dependency>