JAXRSで@QueryParam()でObjectを受けたい

JAXRSでPostだとこんな感じでパラメータをObjectで受けれるじゃないですか、

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public Response login(LoginForm form) {

これをGetでもやりたいとおもったら結構困ったのでメモ
普通のGetはこんな感じ。そもそもGetなのでデータはクエリパラメータで受けるしかないです。

    @Get
    public Response get() {

クエリパラメータを受けるには@QueryParamとかで受けるんですが以下のようにしただけじゃパラメータ解析してくれない。

    @Get
    public String get(@QueryParam("auth") Auth auth) {

とはいえStringでうけとった値を各Getの中で解析するのはめんどくさいなとおもっていたら
受け取るVOのなかにvalueOfもしくはfromStringという名のstaticファクトリメソッドをがあれば良いということがわかった。
なのでAuthをこんな感じにしてあげればOK!

public class Auth {
    private String code;
    private String state;

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
    public static Auth valueOf(String value) {
        return data = JSON.decode(value, Auth.class);
    }
}

色々便利なのね-

参考
JAX-RSでパラメータの受け取り方をいろいろ試す — 裏紙

広告を非表示にする