검색

52.2. 전체 요청 URI 작업

download PDF

초록

요청 URI에는 상당한 양의 정보가 포함됩니다. 이 정보는 47.2.2절. “요청 URI에서 데이터 삽입” 설명된 대로 메서드 매개 변수를 사용하여 액세스할 수 있지만 매개 변수를 사용하면 URI 처리 방법에 대한 특정 제약 조건이 적용됩니다. URI 세그먼트에 액세스하는 데 매개 변수를 사용하면 전체 요청 URI에 대한 리소스 액세스도 제공하지 않습니다.

URI 컨텍스트를 리소스에 삽입하여 전체 요청 URI에 대한 액세스를 제공할 수 있습니다. URI는 UriInfo 개체로 제공됩니다. UriInfo 인터페이스는 여러 가지 방법으로 URI를 분해하는 기능을 제공합니다. URI를 클라이언트로 반환할 URI를 구성할 수 있는 UriBuilder 오브젝트로 URI를 제공할 수도 있습니다.

:experimental:

52.2.1. URI 정보 삽입

52.2.1.1. 개요

UriInfo 오브젝트인 클래스 필드 또는 메서드 매개 변수를 @Context 주석으로 장식하는 경우 현재 요청에 대한 URI 컨텍스트가 UriInfo 오브젝트에 삽입됩니다.

52.2.1.2. 예제

클래스 필드에 URI 컨텍스트 삽입 URI 컨텍스트를 삽입하여 채워진 필드가 있는 클래스를 표시합니다.

클래스 필드에 URI 컨텍스트 삽입

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.Path;
...
@Path("/monstersforhire/")
public class MonsterService
{
  @Context
  UriInfo requestURI;
  ...
}

52.2.2. URI 작업

52.2.2.1. 개요

URI 컨텍스트를 사용할 때의 주요 이점 중 하나는 서비스의 기본 URI와 선택한 리소스에 대한 URI 경로 세그먼트에 대한 액세스를 제공한다는 것입니다. 이 정보는 URI에 따라 처리 결정을 내리거나 응답의 일부로 반환하도록 URI 계산과 같은 여러 목적에 유용할 수 있습니다. 예를 들어, 요청의 기본 URI에 .com 확장 기능이 포함되어 있는 경우 서비스가 US $를 사용할 수 있으며 기본 URI에 .co.uk 확장이 포함된 경우 영국 Pound를 결정할 수 있습니다.

UriInfo 인터페이스는 URI의 부분에 액세스하기 위한 메서드를 제공합니다.

  • 기본 URI
  • 리소스 경로
  • 전체 URI

52.2.2.2. 기본 URI 가져오기

기본 URI 는 서비스가 게시되는 루트 URI입니다. 서비스의 @Path 주석에 지정된 URI의 일부를 포함하지 않습니다. 예를 들어 예 47.5. “URI 디코딩 비활성화” 에 정의된 리소스를 구현하는 서비스가 http://fusesource.org 에 게시되고 http://fusesource.org/montersforhire/nightstalker?12 에서 요청이 작성된 경우 기본 URI는 http://fusesource.org입니다.

표 52.2. “리소스의 기본 URI에 액세스하는 방법” 기본 URI를 반환하는 메서드를 설명합니다.Describes the methods that return the base URI.

표 52.2. 리소스의 기본 URI에 액세스하는 방법
방법Desription

URIgetBaseUri

서비스의 기본 URI를 URI 오브젝트로 반환합니다.

UriBuildergetBaseUriBuilder

기본 URI를 javax.ws.rs.core.UriBuilder 오브젝트로 반환합니다. UriBuilder 클래스는 서비스에서 구현하는 다른 리소스에 대한 URI를 생성하는 데 유용합니다.

52.2.2.3. 경로 가져오기Get the path

요청 URI의 경로 부분은 현재 리소스를 선택하는 데 사용된 URI 부분입니다. 기본 URI를 포함하지 않지만 URI에 포함된 URI 템플릿 변수와 매트릭스 매개 변수를 포함합니다.

경로 값은 선택한 리소스에 따라 다릅니다. 예를 들어 리소스의 경로 가져오기 에 정의된 리소스의 경로는 다음과 같습니다.

  • rootPath/monstersforhire/
  • getterPath/mostersforhire/nightstalker

    GET 요청은 /monstersforhire/nightstalker 에서 작성되었습니다.

  • putterPath/mostersforhire/911

    PUT 요청은 /monstersforhire/911 에서 생성되었습니다.

리소스의 경로 가져오기

@Path("/monstersforhire/")
public class MonsterService
{
  @Context
  UriInfo rootUri;

  ...

  @GET
  public List<Monster> getMonsters(@Context UriInfo getUri)
  {
    String rootPath = rootUri.getPath();
    ...
  }

  @GET
  @Path("/{type}")
  public Monster getMonster(@PathParam("type") String type,
                            @Context UriInfo getUri)
  {
    String getterPath = getUri.getPath();
    ...
  }

  @PUT
  @Path("/{id}")
  public void addMonster(@Encoded @PathParam("type") String type,
                         @Context UriInfo putUri)
  {
    String putterPath = putUri.getPath();
    ...
  }
  ...
}

표 52.3. “리소스 경로에 액세스하는 방법” 리소스 경로를 반환하는 메서드를 설명합니다.Describes the methods that return the resource path.

표 52.3. 리소스 경로에 액세스하는 방법
방법Desription

StringgetPath

리소스의 경로를 디코딩된 URI로 반환합니다.

stringgetPath부울decode

리소스의 경로를 반환합니다. false 를 지정하면 URI 디코딩이 비활성화됩니다.

List<PathSegment>getPathSegments

디코딩된 경로를 javax.ws.rs.core.PathSegment 오브젝트 목록으로 반환합니다. 매트릭스 매개 변수를 포함한 경로의 각 부분은 목록의 고유한 항목에 배치됩니다.

예를 들어 리소스 경로 상자/round# tall 은 세 개의 항목, 박스,라운드, 키가 있는 목록을 만듭니다.

List<PathSegment>getPathSegmentsbooleandecode

경로를 javax.ws.rs.core.PathSegment 오브젝트 목록으로 반환합니다. 매트릭스 매개 변수를 포함한 경로의 각 부분은 목록의 고유한 항목에 배치됩니다. false 를 지정하면 URI 디코딩이 비활성화됩니다.

예를 들어 리소스 경로 box#tall /round 를 사용하면 박스, 키가 넓고 라운드 의 세 항목이 있는 목록이 생성됩니다.

52.2.2.4. 전체 요청 URI 만들기

표 52.4. “전체 요청 URI에 액세스하는 방법” 전체 요청 URI를 반환하는 메서드를 설명합니다.Describes the methods that return the full request URI. 요청 URI를 반환하거나 리소스의 절대 경로를 반환하는 옵션이 있습니다. 차이점은 요청 URI에는 URI에 추가된 쿼리 매개 변수가 포함되어 있으며 절대 경로에 쿼리 매개 변수가 포함되지 않는다는 것입니다.

표 52.4. 전체 요청 URI에 액세스하는 방법
방법Desription

URIgetRequestUri

쿼리 매개 변수와 매트릭스 매개 변수를 포함한 전체 요청 URI를 java.net.URI 오브젝트로 반환합니다.

UriBuildergetRequestUriBuilder

javax.ws.rs.UriBuilder 오브젝트로 쿼리 매개변수 및 매트릭스 매개변수를 포함한 전체 요청 URI를 반환합니다. UriBuilder 클래스는 서비스에서 구현하는 다른 리소스에 대한 URI를 생성하는 데 유용합니다.

URIgetAbsolutePath

matrix 매개 변수를 포함한 전체 요청 URI를 java.net.URI 오브젝트로 반환합니다. 절대 경로에는 쿼리 매개변수가 포함되지 않습니다.

UriBuildergetAbsolutePathBuilder

matrix 매개 변수를 포함한 전체 요청 URI를 javax.ws.rs.UriBuilder 오브젝트로 반환합니다. 절대 경로에는 쿼리 매개변수가 포함되지 않습니다.

URI http://fusesource.org/montersforhire/nightstalker?12.을 사용하여 이루어진 요청의 경우 getRequestUri() 메서드가 http://fusesource.org/montersforhire/nightstalker?12 를 반환합니다. getAbsolutePath() 메서드는 http://fusesource.org/montersforhire/nightstalker 를 반환합니다.

52.2.3. URI 템플릿 변수의 값 가져오기

52.2.3.1. 개요

“경로 설정” 에서 설명한 대로 리소스 경로에는 동적으로 값에 바인딩되는 변수 세그먼트가 포함될 수 있습니다. 종종 이러한 변수 경로 세그먼트는 “URI 경로에서 데이터 가져오기” 에 설명된 대로 리소스 방법에 대한 매개 변수로 사용됩니다. 그러나 URI 컨텍스트를 통해 액세스할 수도 있습니다.

52.2.3.2. 경로 매개 변수를 가져오는 방법

UriInfo 인터페이스는 경로 매개변수 목록을 반환하는 예 52.1. “URI 컨텍스트에서 경로 매개 변수를 반환하는 방법” 에 표시된 두 가지 메서드를 제공합니다.

예 52.1. URI 컨텍스트에서 경로 매개 변수를 반환하는 방법

MultivaluedMap<java.lang.String, java.lang.String>getPathParametersMultivaluedMap<java.lang.String, java.lang.String>getPathParameters부울decode

매개 변수를 사용하지 않는 getPathParameters() 메서드는 경로 매개 변수를 자동으로 디코딩합니다. URI 디코딩을 비활성화하려면 getPathParameters(false) 를 사용합니다.

값은 해당 템플릿 식별자를 키로 사용하여 맵에 저장됩니다. 예를 들어 리소스에 대한 URI 템플릿이 /{color}/box/{note} 인 경우 반환된 맵에는 키가 color 인 두 개의 항목이 있고 유의 합니다.

52.2.3.3. 예제

예 52.2. “URI 컨텍스트에서 경로 매개변수 추출” URI 컨텍스트를 사용하여 경로 매개 변수를 검색하는 코드를 표시합니다.

예 52.2. URI 컨텍스트에서 경로 매개변수 추출

import javax.ws.rs.Path;
import javax.ws.rs.Get;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.core.MultivaluedMap;

@Path("/monstersforhire/")
public class MonsterService

  @GET
  @Path("/{type}/{size}")
  public Monster getMonster(@Context UriInfo uri)
  {
    MultivaluedMap paramMap = uri.getPathParameters();
    String type = paramMap.getFirst("type");
    String size = paramMap.getFirst("size");
  }
}
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.