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 대상” 에 요약되어 있습니다.

표 47.1. @BeanParam injection 대상

대상리소스 클래스 라이프사이클

매개변수

All

FIELD

요청당 (기본값)

제품 상세 정보

요청당 (기본값)

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 를 만들고, 빈 클래스에 매개변수 주석에 의해 지정된 모든 데이터를 삽입합니다.