Получение префикса URL в Play Framework - PullRequest
0 голосов
/ 03 июля 2018

У меня есть приложение, которое размещено на тестовом сервере по URL 192.168.42.42/foo-app. Локально работает на localhost:9000. У меня также есть маршрут /docs/swagger-ui, который необходимо перенаправить на docs/swagger-ui/index.html?url=/docs/swagger. Вот файл маршрутов:

GET     /docs/swagger               controllers.Assets.at(path = "/public", file = "swagger.json")
GET     /docs/swagger-ui            foo.app.controller.ApplicationController.swaggerUI
GET     /docs/swagger-ui/*file      controllers.Assets.at(path="/public/lib/swagger-ui", file: String)

А вот и мой ApplicationController:

package foo.app.controller

import play.api.mvc.{AbstractController, ControllerComponents}

class ApplicationController(cc: ControllerComponents) extends AbstractController(cc) {

  def swaggerUI = Action { implicit request =>
    val pathPrefix = extractPathPrefix(request.path)
    Redirect(s"$pathPrefix/docs/swagger-ui/index.html?url=$pathPrefix/docs/swagger")
  }

  private def extractPathPrefix(path: String) = {
    path.split("/")
      .toList
      .filterNot(_.isEmpty)
      .headOption
      .filterNot(_ == "docs")
      .map(s => s"/$s")
      .getOrElse("")
  } 
}

Все отлично работает локально, но на тестовом сервере перенаправление идет на 192.168.42.42/docs/swagger-ui/index.html?url=/docs/swagger, а мне нужно, чтобы оно пошло на 192.168.42.42/foo-app/docs/swagger-ui/index.html?url=/foo-app/docs/swagger Похоже, что /foo-app как-то устранено. Может кто-нибудь помочь мне понять, что не так?

...