47.2.2. 요청 URI에서 데이터 삽입


47.2.2.1. 개요

RESTful 웹 서비스를 설계하는 모범 사례 중 하나는 각 리소스에 고유한 URI가 있어야 한다는 것입니다. 개발자는 이 원칙을 사용하여 기본 리소스 구현에 많은 정보를 제공할 수 있습니다. 리소스에 대한 URI 템플릿을 설계할 때 개발자는 리소스 구현에 삽입할 수 있는 매개 변수 정보를 포함하도록 템플릿을 빌드할 수 있습니다. 개발자는 리소스 구현에 정보를 제공하는 데 쿼리 및 매트릭스 매개 변수를 활용할 수도 있습니다.

47.2.2.2. URI 경로에서 데이터 가져오기

리소스에 대한 정보를 얻는 가장 일반적인 메커니즘 중 하나는 리소스에 대한 URI 템플릿을 생성하는 데 사용되는 변수를 사용하는 것입니다. 이 작업은 javax.ws.rs.PathParam 주석을 사용하여 수행됩니다. @PathParam 주석에는 데이터가 삽입될 URI 템플릿 변수를 식별하는 단일 매개 변수가 있습니다.

예 47.1. “URI 템플릿 변수에서 데이터 삽입” 에서 @PathParam 주석은 URI 템플릿 변수 색상 의 값이 itemColor 필드에 삽입되도록 지정합니다.

예 47.1. URI 템플릿 변수에서 데이터 삽입

import javax.ws.rs.Path;
import javax.ws.rs.PathParam
...

@Path("/boxes/{shape}/{color}")
class Box
{
  ...

  @PathParam("color")
  String itemColor;

  ...
}

@PathParam 주석에서 지원하는 데이터 유형은 “지원되는 데이터 유형” 에 설명된 것과 다릅니다. @PathParam 주석을 삽입하는 엔터티는 다음 유형 중 하나여야 합니다.

  • PathSegment

    값은 일치하는 경로의 최종 세그먼트입니다.

  • List<PathSegment>

    값은 named template 매개변수와 일치하는 경로 세그먼트에 해당하는 PathSegment 오브젝트 목록입니다.

  • int,char 또는 long과 같은 프리미티브
  • 단일 String 인수를 허용 하는 생성자가 있는 개체입니다.Objects that have a constructor that accepts a single String argument.
  • 단일 String 인수를 허용 하는 정적 valueOf() 메서드가 있는 개체입니다.Objects that have a static valueOf() method that accepts a single String argument.

47.2.2.3. 쿼리 매개변수 사용

웹에서 정보를 전달하는 일반적인 방법은 URI에 쿼리 매개 변수 를 사용하는 것입니다. 쿼리 매개 변수는 URI 끝에 표시되며, 물음표(?)로 URI의 리소스 위치 부분과 구분됩니다. 이름과 값이 등호(=)로 구분된 하나 이상의 이름 값으로 구성됩니다. 두 개 이상의 쿼리 매개 변수를 지정하면 쌍은 세미콜론( ; ) 또는 앰퍼샌드(&amp;)로 서로 구분됩니다. 예 47.2. “쿼리 문자열이 있는 URI” 쿼리 매개 변수가 있는 URI 구문을 보여줍니다.

예 47.2. 쿼리 문자열이 있는 URI

http://fusesource.org?name=value;name2=value2;...
참고

세미콜론 또는 앰퍼샌드를 사용하여 쿼리 매개 변수를 구분할 수 있지만 둘 다 사용할 수는 없습니다.

javax.ws.rs.QueryParam 주석은 쿼리 매개 변수의 값을 추출하여 JAX-RS 리소스에 삽입합니다. 주석은 값이 추출되고 지정된 필드, 빈 속성 또는 매개변수에 삽입되는 쿼리 매개변수의 이름을 식별하는 단일 매개 변수를 사용합니다. @QueryParam 주석은 “지원되는 데이터 유형” 에 설명된 유형을 지원합니다.

예 47.3. “쿼리 매개변수의 데이터를 사용하는 리소스 메서드” 메서드의 id 매개 변수에 쿼리 매개 변수 id 값을 삽입하는 리소스 메서드를 보여줍니다.

예 47.3. 쿼리 매개변수의 데이터를 사용하는 리소스 메서드

import javax.ws.rs.QueryParam;
import javax.ws.rs.PathParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
...

@Path("/monstersforhire/")
public class MonsterService
{
  ...
  @POST
  @Path("/{type}")
  public void updateMonster(@PathParam("type") String type,
                            @QueryParam("id") String id)
  {
    ...
  }
  ...
}

HTTP POST/monstersforhire/daikaiju?id=jonas updateMonster() 메서드의 유형daikaiju 로 설정하고 idjonas 로 설정됩니다.

47.2.2.4. matrix 매개변수 사용

URI 쿼리 매개변수와 같은 URI 매트릭스 매개 변수는 리소스를 선택하는 추가 정보를 제공할 수 있는 이름/값 쌍입니다. 쿼리 매개 변수와는 달리 매트릭스 매개 변수는 URI의 아무 곳에나 나타날 수 있으며 세미콜론(;)을 사용하여 URI의 계층적 경로 세그먼트와 분리됩니다. /mostersforhire/daikaiju;id=jonas 에는 id/monstersforhire/japan;type=daikaiju/flying;wingspan=40 이라는 두 개의 매트릭스 매개변수가 있습니다.wingspan=40에는 typewingspan 이라는 두 개의 매트릭스 매개변수가 있습니다.

참고

리소스의 URI를 계산할 때 매트릭스 매개변수는 평가되지 않습니다. 따라서 요청 URI /monstersforhire/japan;type=daikaiju/flying;wingspan=40/monstersforhire/japan/flying 을 처리하는 데 사용되는 적절한 리소스를 찾는 데 사용됩니다.

matrix 매개변수 값은 javax.ws.rs.MatrixParam 주석을 사용하여 필드, 매개 변수 또는 빈 속성에 삽입됩니다. 주석은 값이 추출되고 지정된 필드, 빈 속성 또는 매개변수에 삽입되는 matrix 매개변수의 이름을 식별하는 단일 매개 변수를 사용합니다. @MatrixParam 주석은 “지원되는 데이터 유형” 에 설명된 유형을 지원합니다.

예 47.4. “매트릭스 매개변수의 데이터를 사용하는 리소스 메서드” 메서드의 매개 변수에 매트릭스 매개 변수 유형id 값을 삽입하는 리소스 메서드를 보여줍니다.

예 47.4. 매트릭스 매개변수의 데이터를 사용하는 리소스 메서드

import javax.ws.rs.MatrixParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
...

@Path("/monstersforhire/")
public class MonsterService
{
  ...
  @POST
  public void updateMonster(@MatrixParam("type") String type,
                            @MatrixParam("id") String id)
  {
    ...
  }
  ...
}

HTTP POST/monstersforhire;type=daikaiju;id=whale the updateMonster() 메서드의 유형daikaiju 로 설정하고 idwhale 으로 설정됩니다.

참고

JAX-RS는 URI의 모든 매트릭스 매개 변수를 한 번에 평가하므로 URI에서 매트릭스 매개 변수 위치에 제약 조건을 적용할 수 없습니다. 예: /monstersforhire/japan;type=daikaiju/flying;wingspan=40 , /monstersforhire/flying;type=daikaiju;type=daikaiju;wingspan=40 type=daikaiju;wingspan=40/flying 은 모두 JAX-RS API를 사용하여 구현된 RESTful 웹 서비스에서 동등한 것으로 처리됩니다.

47.2.2.5. URI 디코딩 비활성화

기본적으로 모든 요청 URI가 디코딩됩니다. 따라서 URI /monster/night%20stalker 와 URI /monster/night stalker 는 동일합니다. 자동 URI 디코딩을 사용하면 ASCII 문자 집합 이외의 문자를 매개 변수로 쉽게 보낼 수 있습니다.

URI를 자동으로 디코딩하지 않으려면 javax.ws.rs.Encoded 주석을 사용하여 URI 디코딩을 비활성화할 수 있습니다. 주석은 다음 수준에서 URI 디코딩을 비활성화하는 데 사용할 수 있습니다.

  • 클래스 수준 - @Encoded 주석으로 클래스를 분리하면 클래스의 모든 매개변수, 필드 및 빈 속성에 대한 URI 디코딩이 비활성화됩니다.
  • 메서드 수준 - @Encoded 주석을 사용하여 메서드를 분리하면 클래스의 모든 매개변수에 대한 URI 디코딩이 비활성화됩니다.
  • 매개 변수/필드 수준- @Encoded 주석을 사용하여 매개 변수 또는 필드를 분리하면 클래스의 모든 매개변수에 대한 URI 디코딩이 비활성화됩니다.

예 47.5. “URI 디코딩 비활성화” getMonster() 메서드가 URI 디코딩을 사용하지 않는 리소스를 보여줍니다. addMonster() 메서드는 type 매개 변수에 대한 URI 디코딩만 비활성화합니다.

예 47.5. URI 디코딩 비활성화

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

  @GET
  @Encoded
  @Path("/{type}")
  public Monster getMonster(@PathParam("type") String type,
                            @QueryParam("id") String id)
  {
    ...
  }

  @PUT
  @Path("/{id}")
  public void addMonster(@Encoded @PathParam("type") String type,
                         @QueryParam("id") String id)
  {
    ...
  }
  ...
}

47.2.2.6. 오류 처리

URI 주입 주석 중 하나를 사용하여 데이터를 삽입하려고 할 때 오류가 발생하면 WebApplicationException 예외를 래핑하는 원래 예외가 생성됩니다. WebApplicationException 예외 상태가 404 로 설정되어 있습니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.