47.2.6. Java Bean에 매개 변수 삽입
47.2.6.1. 개요
REST를 통해 HTML 양식을 게시할 때 서버 측의 일반적인 패턴은 양식에서 수신한 모든 데이터를 캡슐화하기 위한 Java 빈(및 다른 매개 변수 및 HTML 헤더에서 데이터일 수 있음)을 생성하는 것입니다. 일반적으로 이 Java 빈을 생성하는 것은 두 단계 프로세스입니다. 리소스 메서드는 주입(예: @FormParam
주석을 메서드 매개 변수에 추가하여) 양식 값을 수신하며, 리소스 메서드는 빈의 생성자를 호출하여 양식 데이터를 전달합니다.
JAX-RS 2.0 @BeanParam
주석을 사용하면 단일 단계에서 이 패턴을 구현할 수 있습니다. 양식 데이터는 빈 클래스 필드에 직접 삽입할 수 있으며, JAX-RS 런타임에서 빈 자체는 자동으로 생성됩니다. 예를 들어 가장 쉽게 설명할 수 있습니다.
47.2.6.2. injectiontion 대상
@BeanParam
주석은 리소스 메서드 매개 변수, 리소스 필드 또는 빈 속성에 연결할 수 있습니다. 그러나 매개변수 대상은 모든 리소스 클래스 라이프사이클에 사용할 수 있는 유일한 종류의 대상입니다. 다른 종류의 대상은 요청별 라이프사이클로 제한됩니다. 이 상황은 표 47.1. “@BeanParam injection 대상” 에 요약되어 있습니다.
대상 | 리소스 클래스 라이프사이클 |
---|---|
| All |
| 요청당 (기본값) |
| 요청당 (기본값) |
47.2.6.3. BeanParam 주석이 없는 예
다음 예제에서는 @BeanParam
을 사용하지 않고 기존 접근 방식을 사용하여 Java 빈에서 양식 데이터를 캡처하는 방법을 보여줍니다.
// 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. BeanParam 주석 사용 예
위 예제를 리팩터링하여 @BeanParam
주석을 활용할 수 있습니다. @BeanParam
접근법을 사용하는 경우 양식 매개 변수를 빈 클래스의 필드에 직접 삽입할 수 있습니다
. 실제로 @PathParam
,@QueryParam
,@FormParam
,@MatrixParam
,@CookieParam
, @HeaderParam , @HeaderParam
등의 빈 클래스에서 표준 JAX-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
리소스 메서드에 게시되면 JAX-RS 런타임에서 자동으로 TableOrder
인스턴스, orderBean
; orderBean 를 만들고, 빈 클래스에 매개변수 주석에 의해 지정된 모든 데이터를 삽입합니다.