경로를 재사용하는 사용자 지정 지시문을 만드는 방법은 무엇입니까?

코니 돕스

여러 시나리오에서 재사용하려는 경로 스 니펫이 있습니다.

val dirSegment = "licenses"
path( dirSegment ~ PathEnd ) {
  redirect( dirSegment + "/", StatusCodes.MovedPermanently ) 
} ~ 
pathPrefix(dirSegment) { 
  path("") {
    /* do something */
  }
}

나는 이것을 지시문 (또는 매개 변수화 가능한 경로?)으로 바꾸고 싶습니다. 여기에서 다음과 같이 리디렉션 동작을 유지하는 흰색 dirSegment대신 val 값과 임의의 추가 라우팅 / 코드를 path("") { /* do something */ }지정할 수 있습니다.

directoryPath("licenses") {
  path("") {
    /* do something */
  }
} ~ 
directoryPath("about") {
  path("") {
    /* do somthing else */
  }
}

모든 반복없이 다음과 동일한 동작을하는 반면 :

val dirSegment = "licenses"
val anotherDir = "About"

path( dirSegment ~ PathEnd ) {
  redirect(dirSegment + "/", StatusCodes.MovedPermanently ) 
} ~ 
pathPrefix(dirSegment) { 
  path("") {
    /* do something */
  }
} ~
path( anotherDir ~ PathEnd ) {
  redirect(anotherDir + "/", StatusCodes.MovedPermanently ) 
} ~ 
pathPrefix(anotherDir) { 
  path("") {
    /* do something else */
  }
}

이 질문은 스프레이 라우팅에서 URL 끝에 슬래시를 자동으로 추가하는 방법의 일부 토론에서 영감을 얻었습니다 .

앤디

이에 대한 사용자 지정 지시문을 작성해야합니다.

// additional imports you may need
import shapeless.HNil
import spray.http.StatusCodes
import spray.routing.Directive0
import spray.routing.PathMatcher

이제 그게 끝났습니다.

/**
 * Spray's PathEnd matches trailing optional slashes... we can't have that
 * otherwise it will cause a redirect loop.
 */
object PathEndNoSlash extends PathMatcher[HNil] {
  def apply(path: Path) = path match {
    case Path.Empty ⇒ PathMatcher.Matched.Empty
    case _          ⇒ PathMatcher.Unmatched
  }
}

/**
 * Custom directive that uses a redirect to add a trailing slashe to segment
 * if the slash isn't present.
 */
def directoryPath(segment: String) = new Directive0 {
  def happly(f: HNil ⇒ Route) =
    // first, the redirect
    pathPrefix(segment ~ PathEndNoSlash) {
      redirect("/" + segment + "/", StatusCodes.MovedPermanently) } ~
    // delegate actual work to nested directives
    pathPrefix(segment).happly(f)
}

용법:

directoryPath("about") {
  path("a") {
    complete {
      "this is /about/a"
    }
  } ~ path("b") {
    complete {
      "this is /about/b"
    }
  } ~ path(PathEnd) {
    complete {
      "this is /about/"
    }
  }
}

사용자가에 액세스 /about하면로 전달되고 /about/"this is / about /"이 표시됩니다. 중첩 된 경로 ab예상대로 작동합니다 (즉, 자체 리디렉션없이).

참고 :이 솔루션은 스프레이 1.2 용입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Flutter 사용자 지정 탭 바를 만드는 방법은 무엇입니까?

분류에서Dev

Django 사용자 지정 쿼리를 만드는 방법은 무엇입니까?

분류에서Dev

KBPAnnotator를 사용하여 사용자 지정 관계를 만드는 방법은 무엇입니까?

분류에서Dev

ID를 사용하여 응용 프로그램에서 사용되는 상태를 변경하는 Angularjs에서 사용자 지정 지시문을 만드는 방법은 무엇입니까?

분류에서Dev

사용자 지정 각도 지시문을 사용하여 스크립트를로드하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 마커를 사용자 지정보기로 설정하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 마커를 사용자 지정보기로 설정하는 방법은 무엇입니까?

분류에서Dev

Xcursor로 사용자 지정 마우스 커서를 재정의하는 방법은 무엇입니까?

분류에서Dev

시트 상호 참조로 사용자 지정 목록을 만드는 방법은 무엇입니까?

분류에서Dev

프로그램에 대한 사용자 지정 시작 화면을 만드는 방법은 무엇입니까?

분류에서Dev

사용자 지정 지시문에서 visitInputObject 메서드를 트리거하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 지시문에서 visitInputObject 메서드를 트리거하는 방법은 무엇입니까?

분류에서Dev

내 사용자 지정 지시문에서 메서드를 트리거하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 빌드에서 경고를 오류로 처리하는 방법은 무엇입니까?

분류에서Dev

메서드를 즉시 실행하지 않는 간단한 사용자 지정 v-on 지시문을 수정하는 방법은 무엇입니까?

분류에서Dev

사용자 지정 지시문에서 함수로 $ event를 전달하는 방법은 무엇입니까?

분류에서Dev

경고보기처럼 보이는 사용자 지정보기를 만드는 방법은 무엇입니까?

분류에서Dev

Windows Server : 홈 디렉토리를 지정하는 새 사용자를 만드는 방법은 무엇입니까?

분류에서Dev

사용자 지정 지시문에서 사용자 지정 필터로 값을 전달하는 방법은 무엇입니까?

분류에서Dev

요청 재 시도를 위해 사용자 지정 헤더를 추가하는 방법은 무엇입니까?

분류에서Dev

jQuery로 사용자 지정 양식 유효성 검사를 만드는 방법은 무엇입니까?

분류에서Dev

JavaScript를 사용하여 재설정 / 새로 고침 버튼을 만드는 방법은 무엇입니까?

분류에서Dev

Python pjsua-사용자 지정 메시지를 만드는 방법은 무엇입니까?

분류에서Dev

사용자 지정 메시지로 Joi 유효성 검사를 설정하는 방법은 무엇입니까?

분류에서Dev

Team Services에서 사용자 지정 빌드 환경을 만드는 방법은 무엇입니까?

분류에서Dev

WPF를 사용하지 않고 Silverlight 5에서 generic.xaml을 사용하여 사용자 지정 컨트롤을 만드는 방법은 무엇입니까?

분류에서Dev

두 가지 색상으로 사용자 지정 원 UIView를 만드는 방법은 무엇입니까?

분류에서Dev

사용자 지정 스트라이드로 ndarray :: ArrayView를 만드는 방법은 무엇입니까?

분류에서Dev

Ionic2 사용자 지정 빌드 프로세스를 만드는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Flutter 사용자 지정 탭 바를 만드는 방법은 무엇입니까?

  2. 2

    Django 사용자 지정 쿼리를 만드는 방법은 무엇입니까?

  3. 3

    KBPAnnotator를 사용하여 사용자 지정 관계를 만드는 방법은 무엇입니까?

  4. 4

    ID를 사용하여 응용 프로그램에서 사용되는 상태를 변경하는 Angularjs에서 사용자 지정 지시문을 만드는 방법은 무엇입니까?

  5. 5

    사용자 지정 각도 지시문을 사용하여 스크립트를로드하는 방법은 무엇입니까?

  6. 6

    사용자 지정 마커를 사용자 지정보기로 설정하는 방법은 무엇입니까?

  7. 7

    사용자 지정 마커를 사용자 지정보기로 설정하는 방법은 무엇입니까?

  8. 8

    Xcursor로 사용자 지정 마우스 커서를 재정의하는 방법은 무엇입니까?

  9. 9

    시트 상호 참조로 사용자 지정 목록을 만드는 방법은 무엇입니까?

  10. 10

    프로그램에 대한 사용자 지정 시작 화면을 만드는 방법은 무엇입니까?

  11. 11

    사용자 지정 지시문에서 visitInputObject 메서드를 트리거하는 방법은 무엇입니까?

  12. 12

    사용자 지정 지시문에서 visitInputObject 메서드를 트리거하는 방법은 무엇입니까?

  13. 13

    내 사용자 지정 지시문에서 메서드를 트리거하는 방법은 무엇입니까?

  14. 14

    사용자 지정 빌드에서 경고를 오류로 처리하는 방법은 무엇입니까?

  15. 15

    메서드를 즉시 실행하지 않는 간단한 사용자 지정 v-on 지시문을 수정하는 방법은 무엇입니까?

  16. 16

    사용자 지정 지시문에서 함수로 $ event를 전달하는 방법은 무엇입니까?

  17. 17

    경고보기처럼 보이는 사용자 지정보기를 만드는 방법은 무엇입니까?

  18. 18

    Windows Server : 홈 디렉토리를 지정하는 새 사용자를 만드는 방법은 무엇입니까?

  19. 19

    사용자 지정 지시문에서 사용자 지정 필터로 값을 전달하는 방법은 무엇입니까?

  20. 20

    요청 재 시도를 위해 사용자 지정 헤더를 추가하는 방법은 무엇입니까?

  21. 21

    jQuery로 사용자 지정 양식 유효성 검사를 만드는 방법은 무엇입니까?

  22. 22

    JavaScript를 사용하여 재설정 / 새로 고침 버튼을 만드는 방법은 무엇입니까?

  23. 23

    Python pjsua-사용자 지정 메시지를 만드는 방법은 무엇입니까?

  24. 24

    사용자 지정 메시지로 Joi 유효성 검사를 설정하는 방법은 무엇입니까?

  25. 25

    Team Services에서 사용자 지정 빌드 환경을 만드는 방법은 무엇입니까?

  26. 26

    WPF를 사용하지 않고 Silverlight 5에서 generic.xaml을 사용하여 사용자 지정 컨트롤을 만드는 방법은 무엇입니까?

  27. 27

    두 가지 색상으로 사용자 지정 원 UIView를 만드는 방법은 무엇입니까?

  28. 28

    사용자 지정 스트라이드로 ndarray :: ArrayView를 만드는 방법은 무엇입니까?

  29. 29

    Ionic2 사용자 지정 빌드 프로세스를 만드는 방법은 무엇입니까?

뜨겁다태그

보관