パラメータをStringと宣言し、それを自分で変換するよりも、より洗練された定義方法がありますか?例えばのように。クラスjavax.rs.BooleanFlag
またはそれに類するもの?あなたはjavadoc for @QueryParamを見れば
はありません、このようなタイプ(BooleanFlag
)、あなたは私たちが@QueryParam
値を使用するようにカスタムタイプを作成する方法のオプションのリストが表示されます(ほとんどの部分でも同じことが当てはまりますまた、他の@XxxParam
秒)のために
- が
- が
static
方法はvalueOf
または単一の文字列引数を受け入れfromString
を命名した単一の文字列引数を受け取るコンストラクタを持っている(、Fを参照してください例:Integer.valueOf(String)
)
- 登録済みの
ParamConverterProvider
の実装があり、タイプの「文字列から」変換可能なParamConverter
インスタンスを返すJAX-RS拡張SPIインスタンスがあります。
照会フラグが存在しているときに、最初のオプションから、理論的には、あなたが
public class Flag {
private final boolean isPresent;
public Flag(String param) { isPresent = param != null; }
public boolean isPresent() { return isPresent; }
}
@GET
public String get(@QueryParam("bar") Flag bar) {
if (bar.isPresent()) {
return "bar is present";
} else {
return "bar is not present";
}
}
ような何かを行うことができるはず今、これは動作します。しかし、そうでないときは、他の非プリミティブ型と同じように動作します。それはnullです。したがって、bar.isPresent
の呼び出しはNPEを与えます。 fromString
とvalueOf
でテストし、同じ結果を得ました。我々チェックif (bar == null)
することができますが、それは単に文字列を使用し、文字列がnullであるかどうかをチェックするだけで良いことはありません。それはかなりではありません。
最後のオプションはParamConverterProvider
です。どちらが実際に動作しますか。以下は実装です。
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;
@Provider
public class FlagParamConverterProvider implements ParamConverterProvider {
@Override
public <T> ParamConverter<T> getConverter(
Class<T> rawType, Type genericType, Annotation[] annotations) {
if (rawType != Flag.class) {
return null;
}
return new ParamConverter<T>() {
@Override
public T fromString(String value) {
return (T)new Flag(value);
}
@Override
public String toString(T value) { return null; }
};
}
}
プロバイダが登録されていることを確認してください。それは私の意見ではきれいな解決策です。
リソースを削除する場合、なぜ 'DELETE'メソッドを使用しないのですか? –
私の場合は統計を生成しましたが、後でこの統計のために使用されたレコードを削除する必要があります。パラメータの名前を無視してください。これは私の質問とは無関係で、今編集します! :) – lathspell