BeanParamアノテーション

【前提条件】

[環境]

【概要】

今回はJAX-RS2.0で追加されたBeanParamアノテーションについてです。

パラメータを受け取る際にはFormParamアノテーションなどを使用していましたが、
BeanParamアノテーションはBeanでパラメータを受け取れます。

【ソース】

[Bean]
import javax.ws.rs.FormParam;

public class ParamBean {

    @FormParam("firstName")
    private String firstName = null;

    @FormParam("lastName")
    private String lastName = null;

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

普通のJavaBeanにFormParamアノテーションを付与しただけです。

[リソースクラス]
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import javax.ws.rs.BeanParam;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;
import jp.glory.resources.bean.ParamBean;

@Path("/BeanParam")
public class BeanParamResource {

    @POST
    public Response postExecute(@BeanParam ParamBean bean) {

        final StringBuilder builder = new StringBuilder();

        builder.append("<html>");
        builder.append("<head>");
        builder.append("<title>Validation</title>");
        builder.append("</head>");
        builder.append("<body>");
        builder.append("<div>firstName : ").append(bean.getFirstName()).append("</div>");
        builder.append("<div>lastName : ").append(bean.getLastName()).append("</div>");
        builder.append("</body>");
        builder.append("</html>");

        return Response.ok(builder.toString()).build();
    } 
}

実行されるメソッドのパラメータにBeanを指定し、
パラメータにjavax.ws.rs.BeanParamアノテーションを付与します。

今まではリソースクラスにFormParamアノテーションなどを
付与して取得していました。

BeanParamアノテーションを使用することにより、
Beanの各プロパティに値がインジェクションされます。