47.2. Cryostat-RS API 사용
47.2.1. Cryostat-RS 주석 유형
표준 Cryostat-RS API는 필드,ans 속성 및 메서드 매개 변수에 값을 삽입하는 데 사용할 수 있는 주석을 지정합니다. 주석은 세 가지 유형으로 분할할 수 있습니다.
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 템플릿 변수 색상
값이 item
Cryostat 필드에 삽입되도록 지정합니다.
예 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>
값은 이름이 지정된 template 매개변수와 일치하는 경로 세그먼트에 해당하는 PathSegment 오브젝트 목록입니다.
-
int
,char
또는long
과 같은 프리미티브 -
단일
String
인수를 허용하는 생성자가 있는 개체 -
단일
String
인수를 허용하는 정적valueOf()
메서드가 있는 개체
47.2.2.3. 쿼리 매개변수 사용
웹에서 정보를 전달하는 일반적인 방법은 URI에서 쿼리 매개 변수 를 사용하는 것입니다. 쿼리 매개변수는 URI 끝에 표시되고 물음표(?
)로 URI의 리소스 위치 부분과 구분됩니다. 이름과 값이 등호(=
)로 구분된 이름 값 쌍으로 구성됩니다. 쿼리 매개 변수가 두 개 이상 지정되면 쌍이 together(; ) 또는 앰퍼샌드(&
amp;
)로 구분됩니다. 예 47.2. “쿼리 문자열이 포함된 URI” 쿼리 매개 변수가 있는 URI의 구문을 표시합니다.
예 47.2. 쿼리 문자열이 포함된 URI
http://fusesource.org?name=value;name2=value2;...
앰퍼샌드 또는 앰퍼샌드를 사용하여 쿼리 매개변수를 분리할 수 있지만 둘 다 분리할 수는 없습니다.
javax.ws.rs.QueryParam
주석은 쿼리 매개 변수의 값을 추출하여 Cryostat-RS 리소스에 삽입합니다. 이 주석은 값을 추출하여 지정된 필드, Cryostat 속성 또는 매개 변수에 삽입하는 쿼리 매개변수의 이름을 식별하는 단일 매개 변수를 사용합니다. @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) { ... } ... }
/monstersforhire/da Cryostatiju?id=jonas 에 대한 HTTP POST
를 처리하려면 updateMonster()
메서드 유형이
da Cryostati ju
로 설정되고 id
는 jonas
로 설정됩니다.
47.2.2.4. 매트릭스 매개변수 사용
URI 매트릭스 매개 변수(예: URI 쿼리 매개변수)는 리소스를 선택하는 추가 정보를 제공할 수 있는 이름/값 쌍입니다. 쿼리 매개변수와 달리 매트릭스 매개 변수는 URI의 아무 곳에나 표시될 수 있으며, URI의 계층 경로 세그먼트와 분리되어 있습니다.
/mostersforhire/da Cryostatiju;id=jonas 에는 id
및 /monstersforhire/japan;type=da Cryostatiju/flying;wingspan=40 이라는 하나의 매트릭스 매개변수가 있으며 유형
및 wingspan
이라는 두 개의 매트릭스 매개변수가 있습니다.
매트릭스 매개변수는 리소스의 URI를 계산할 때 평가되지 않습니다. 따라서 요청 URI /monstersforhire/japan;type=da Cryostatiju/flying;wingspan=40 은 /monstersforhire/japan/flying.
매트릭스 매개변수 값은 javax.ws.rs.MatrixParam
주석을 사용하여 필드, 매개변수 또는 8080 속성에 삽입됩니다. 이 주석은 값을 추출하여 지정된 필드, Cryostat 속성 또는 매개 변수에 삽입하는 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) { ... } ... }
/monstersforhire;type=da Cryostatiju;id=whale 에 HTTP POST
를 처리하려면 updateMonster()
메서드 유형이
da Cryostati ju
로 설정되고 id
는 whale
으로 설정됩니다.
Cryostat-RS는 URI의 모든 매트릭스 매개변수를 한 번에 평가하므로 URI의 매트릭스 매개변수 위치에 제약 조건을 적용할 수 없습니다. 예: /monstersforhire/japan;type=da Cryostatiju/flying;wingspan=40 , /monstersforhire/japan/flying;type=da Cryostatiju;wingspan=40, 및 /monstersforhire/japan;/japan;/japan; type=da Cryostatiju;wingspan=40/flying 은 모두 Cryostat-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 디코딩을 비활성화할 수 있습니다.
-
클래스 level-Decorating a class with the
@Encoded
주석을 사용하면 클래스의 모든 매개변수, 필드 및 empty 속성에 대한 URI 디코딩이 비활성화됩니다. -
메서드 level-Decorating a method with the
@Encoded
주석을 사용하면 클래스의 모든 매개변수에 대한 URI 디코딩이 비활성화됩니다. -
@Encoded 주석을 사용하여 매개변수/필드 level-Decorating a parameter or field with the
@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
로 설정됩니다.
47.2.3. HTTP 메시지 헤더에서 데이터 삽입
47.2.3.1. 개요
일반적인 사용에서 요청 메시지의 HTTP 헤더는 메시지에 대한 일반 정보, 전송 중 처리 방법, 예상 응답에 대한 세부 정보를 전달합니다. 몇 가지 표준 헤더가 일반적으로 인식되고 사용되지만 HTTP 사양에서는 모든 이름/값 쌍을 HTTP 헤더로 사용할 수 있습니다. Cryostat-RS API는 HTTP 헤더 정보를 리소스 구현에 삽입하기 위한 간편한 메커니즘을 제공합니다.
가장 일반적으로 사용되는 HTTP 헤더 중 하나는 쿠키입니다. 쿠키를 사용하면 HTTP 클라이언트 및 서버가 여러 요청/응답 시퀀스에서 정적 정보를 공유할 수 있습니다. Cryostat-RS API는 템플릿에서 리소스 구현에 직접 데이터를 삽입하는 주석을 제공합니다.
47.2.3.2. HTTP 헤더에서 정보 삽입
javax.ws.rs.HeaderParam
주석은 HTTP 헤더 필드의 데이터를 매개 변수, 필드 또는ans 속성에 삽입하는 데 사용됩니다. 값이 추출되어 리소스 구현에 삽입되는 HTTP 헤더 필드의 이름을 지정하는 단일 매개변수가 있습니다. 연결된 매개변수, 필드 또는 8080 속성은 “지원되는 데이터 유형” 에 설명된 데이터 유형을 준수해야 합니다.
If- Cryostat-Since 헤더 삽입 클래스의 가장 오래된Date
필드에 HTTP If- Cryostat- since
헤더의 값을 삽입하는 코드를 표시합니다.
If- Cryostat-Since 헤더 삽입
import javax.ws.rs.HeaderParam; ... class RecordKeeper { ... @HeaderParam("If-Modified-Since") String oldestDate; ... }
47.2.3.3. 쿠키에서 정보 삽입
쿠키는 특별한 유형의 HTTP 헤더입니다. 이는 첫 번째 요청에서 리소스 구현에 전달되는 하나 이상의 이름/값 쌍으로 구성됩니다. 첫 번째 요청 후 쿠키는 각 메시지와 함께 공급자와 소비자 간에 전달됩니다. 사용자가 요청을 생성하기 때문에 사용자만 쿠키를 변경할 수 있습니다. 쿠키는 일반적으로 여러 요청/응답 시퀀스에서 세션을 유지 관리하고, 사용자 설정을 저장하고, 유지할 수 있는 기타 데이터를 유지하는 데 사용됩니다.
javax.ws.rs.CookieParam
주석은 쿠키 필드에서 값을 추출하여 리소스 구현에 삽입합니다. 값을 추출할 쿠키 필드의 이름을 지정하는 단일 매개변수를 사용합니다. “지원되는 데이터 유형” 에 나열된 데이터 유형 외에도 @
로 데코레이팅된 엔터티도 오브젝트일 수 있습니다.
Cookie
Param
예 47.6. “쿠키 삽입” CB
클래스의 필드에 handle
쿠키의 값을 삽입하는 코드를 표시합니다.
예 47.6. 쿠키 삽입
import javax.ws.rs.CookieParam; ... class CB { ... @CookieParam("handle") String handle; ... }
47.2.3.4. 오류 처리
HTTP 메시지 삽입 주석 중 하나를 사용하여 데이터를 삽입하려고 할 때 오류가 발생하면 원래 예외를 래핑하는 WebApplicationException 예외가 생성됩니다. WebApplicationException 예외 상태는 400
으로 설정됩니다.
47.2.4. HTML 양식에서 데이터 삽입
47.2.4.1. 개요
HTML 양식은 사용자로부터 정보를 얻는 쉬운 수단이며 쉽게 만들 수 있습니다. 양식 데이터는 HTTP GET
요청 및 HTTP POST
요청에 사용할 수 있습니다.
- GET
-
양식 데이터가 HTTP
GET
요청의 일부로 전송되면 데이터가 쿼리 매개변수 세트로 URI에 추가됩니다. 쿼리 매개변수의 데이터를 삽입하는 방법은 “쿼리 매개변수 사용” 에서 설명합니다. - POST
-
양식 데이터가 HTTP
POST
요청의 일부로 전송되면 데이터가 HTTP 메시지 본문에 배치됩니다. 양식 데이터는 양식 데이터를 지원하는 일반 엔티티 매개 변수를 사용하여 처리할 수 있습니다.@FormParam
주석을 사용하여 데이터를 추출하고 해당 조각을 리소스 메서드 매개변수에 삽입하여 처리할 수도 있습니다.
47.2.4.2. @FormParam 주석을 사용하여 양식 데이터 삽입
javax.ws.rs.FormParam
주석은 양식 데이터에서 필드 값을 추출하고 해당 값을 리소스 메서드 매개변수에 삽입합니다. 이 주석은 단일 매개변수를 사용하여 값을 추출하는 필드의 키를 지정합니다. 관련 매개변수는 “지원되는 데이터 유형” 에 설명된 데이터 유형을 준수해야 합니다.
Cryostat-RS API Javadoc은 @FormParam
주석을 필드, 메서드 및 매개변수에 배치할 수 있음을 나타냅니다. 그러나 @FormParam
주석은 리소스 메서드 매개변수에 배치될 때만 의미가 있습니다.
47.2.4.3. 예
리소스 메서드 매개변수에 데이터 삽입 양식 데이터를 매개 변수에 삽입하는 리소스 메서드를 표시합니다. 이 메서드는 클라이언트의 폼에 문자열 데이터를 포함하는 세 가지 필드제목
,태그
및 본문을
포함하는 것으로 가정합니다.
리소스 메서드 매개변수에 데이터 삽입
import javax.ws.rs.FormParam; import javax.ws.rs.POST; ... @POST public boolean updatePost(@FormParam("title") String title, @FormParam("tags") String tags, @FormParam("body") String post) { ... }
47.2.5. 삽입할 기본값 지정
47.2.5.1. 개요
보다 강력한 서비스 구현을 위해 선택적 매개변수를 기본값으로 설정할 수 있습니다. 이는 긴 URI 문자열을 입력하기 때문에 쿼리 매개변수 및 매트릭스 매개변수에서 가져온 값에 특히 유용할 수 있습니다. 또한 요청하는 시스템에 모든 값을 설정할 수 있는 적절한 정보가 없을 수 있으므로 쿠키에서 추출된 매개변수에 대한 기본값을 설정할 수도 있습니다.
javax.ws.rs.DefaultValue
주석은 다음 삽입 주석과 함께 사용할 수 있습니다.
-
@PathParam
-
@QueryParam
-
@MatrixParam
-
@FormParam
-
@HeaderParam
-
@CookieParam
@DefaultValue
주석은 주입 주석에 해당하는 데이터가 요청에 없는 경우 사용할 기본값을 지정합니다.
47.2.5.2. 구문
매개변수의 기본값을 설정하는 구문 @DefaultValue
주석을 사용하는 구문을 표시합니다.
매개변수의 기본값을 설정하는 구문
import javax.ws.rs.DefaultValue; ... void resourceMethod(@MatrixParam("matrix") @DefaultValue("value) int someValue, ... ) ...
주석은 매개 변수, 8080 또는 필드 앞에 있어야 합니다. 관련 삽입 주석과 관련된 @DefaultValue
주석의 위치는 중요하지 않습니다.
@DefaultValue
주석은 단일 매개변수를 사용합니다. 주입 주석을 기반으로 적절한 데이터를 추출할 수 없는 경우 이 매개변수는 필드에 삽입되는 값입니다. 값은 모든 문자열
값일 수 있습니다. 값은 연결된 필드 유형과 호환되어야 합니다. 예를 들어, 연결된 필드가 int
유형의 경우 기본값 blue
값은 예외를 생성합니다.
47.2.5.3. 목록 및 세트 처리
주석이 달린 매개 변수 유형인 Quarkus 또는 필드가 List, Set 또는 SortedSet인 경우 결과 컬렉션에는 제공된 기본값에서 매핑된 단일 항목이 포함됩니다.
47.2.5.4. 예
기본값 설정 다음은 @DefaultValue
를 사용하여 값이 삽입된 필드의 기본값을 지정하는 두 가지 예제를 보여줍니다.
기본값 설정
import javax.ws.rs.DefaultValue; import javax.ws.rs.PathParam; import javax.ws.rs.QueryParam; import javax.ws.rs.GET; import javax.ws.rs.Path; @Path("/monster") public class MonsterService { @Get public Monster getMonster(@QueryParam("id") @DefaultValue("42") int id, @QueryParam("type") @DefaultValue("bogeyman") String type) { ... } ... }
기본값 설정 의 getMonster()
메서드는 GET
요청이 baseURI/monster 로 전송될 때 호출됩니다. 이 메서드에는 URI에 추가되는 두 개의 쿼리 매개 변수 id
및 type
이 필요합니다. 따라서 URI baseURI/monster?id=1&type=fom Cryostatiri 를 사용하는 GET
요청은 ID가 1인 Fom Cryostatiri를 반환합니다.
@DefaultValue
주석은 두 매개변수 모두에 배치되므로 쿼리 매개변수를 생략하면 getMonster()
메서드가 작동할 수 있습니다. baseURI/monster로 전송되는 GET
요청은 URI baseURI /monster?id=42&type=bogeyman 을 사용하여 GET
요청과 동일합니다.
47.2.6. Java Cryostat에 매개변수 삽입
47.2.6.1. 개요
REST를 통해 HTML 양식을 게시할 때 서버 측의 일반적인 패턴은 양식으로 수신된 모든 데이터(및 다른 매개 변수 및 HTML 헤더의 데이터일 수 있음)를 캡슐화하는 Java 빈을 만드는 것입니다. 일반적으로 이 Java 8080 생성은 두 가지 단계 프로세스입니다. 리소스 메서드는 삽입을 통해 양식 값(예: 메서드 매개 변수에 @FormParam
주석을 추가하여)을 수신하며, 리소스 메서드는 form 데이터를 전달하여,ans의 생성자를 호출합니다.
Cryostat-RS 2.0 @BeanParam
주석을 사용하면 이 패턴을 단일 단계로 구현할 수 있습니다. 양식 데이터는 빈 클래스의 필드에 직접 삽입할 수 있으며, 8080 자체는 Cryostat-RS 런타임을 통해 자동으로 생성됩니다. 예를 들어 가장 쉽게 설명할 수 있습니다.
47.2.6.2. target
@BeanParam
주석은 리소스 메서드 매개변수, 리소스 필드 또는ans 속성에 연결할 수 있습니다. 그러나 매개 변수 대상은 모든 리소스 클래스 라이프사이클에 사용할 수 있는 유일한 종류의 대상입니다. 다른 종류의 대상은 요청별 라이프사이클로 제한됩니다. 이 상황은 표 47.1. “@BeanParamParam Targets” 에 요약되어 있습니다.
대상 | 리소스 클래스 라이프사이클 |
---|---|
| All |
| 요청당 (기본값) |
| 요청당 (기본값) |
47.2.6.3. CryostatParam 주석이 없는 예
다음 예제에서는 @BeanParam
을 사용하지 않고 기존 접근 방식을 사용하여 Java 8080에서 양식 데이터를 캡처하는 방법을 보여줍니다.
// Java import javax.ws.rs.POST; import javax.ws.rs.FormParam; import javax.ws.rs.core.Response; ... @POST public Response orderTable(@FormParam("orderId") String orderId, @FormParam("color") String color, @FormParam("quantity") String quantity, @FormParam("price") String price) { ... TableOrder bean = new TableOrder(orderId, color, quantity, price); ... return Response.ok().build(); }
이 예에서 orderTable
방법은 조각 모음 웹 사이트에서 테이블 수를 주문하는 데 사용되는 양식을 처리합니다. 주문 폼이 게시되면 양식 값이 orderTable
메서드의 매개 변수에 삽입되고 orderTable
메서드는 삽입된 양식 데이터를 사용하여 TableOrder
클래스의 인스턴스를 명시적으로 만듭니다.
47.2.6.4. CryostatParam 주석의 예
이전 예제를 리팩토링하여 @BeanParam
주석을 활용할 수 있습니다. @BeanParam
접근 방식을 사용하는 경우 form 매개변수를 빈 클래스인 TableOrder
의 필드에 직접 삽입할 수 있습니다. 사실, @PathParam
,@QueryParam
,@FormParam
,@MatrixParam
,@CookieParam
, @HeaderParam , @HeaderParam
을 포함하여, 8080 클래스의 표준 Cryostat-RS 매개변수 주석을 사용할 수 있습니다. 폼을 처리하기 위한 코드는 다음과 같이 리팩토링할 수 있습니다.
// Java import javax.ws.rs.POST; import javax.ws.rs.FormParam; import javax.ws.rs.core.Response; ... public class TableOrder { @FormParam("orderId") private String orderId; @FormParam("color") private String color; @FormParam("quantity") private String quantity; @FormParam("price") private String price; // Define public getter/setter methods // (Not shown) ... } ... @POST public Response orderTable(@BeanParam TableOrder orderBean) { ... // Do whatever you like with the 'orderBean' bean ... return Response.ok().build(); }
이제 빈 클래스인 TableOrder에 양식 주석이 추가되었으므로 리소스 메서드 서명의 모든 @FormParam
주석을 다음과 같이 단일 @BeanParam
주석으로 교체할 수 있습니다. 이제 폼이 orderTable
리소스 메서드에 게시되면, Cryostat-RS 런타임은 TableOrder
인스턴스인 orderBean
을 자동으로 생성하고, Cryostat 클래스의 매개 변수 주석으로 지정된 모든 데이터를 삽입합니다.