web-dev-qa-db-ja.com

@DefaultValueが指定されていない場合の@QueryParamのデフォルト値は何ですか?

たとえば、次のJava rest定義:

@GET
@Path("/something")
public String somthing(
    @QueryParam("valString") String valString,
    @QueryParam("valInt") int valInt,
    @QueryParam("valBool") boolean valBool
) {
  ...
}

そして呼び出し:

curl -X GET 127.0.0.1/something

呼び出しで指定されない場合、パラメーター値はどうなりますか?(valString = ?、 valInt = ?、 valBool =?)

28

簡潔な答え

パラメータ値は次のとおりです。

  • valStringnull
  • valInt0
  • valBoolfalse

少し長い答え

Java EE 7チュートリアル について 要求パラメーターの抽出

@DefaultValue@QueryParamと組み合わせて使用​​せず、クエリパラメーターがリクエストに存在しない場合、値はListSet、またはSortedSetの空のコレクションになります。他のオブジェクトタイプの場合はnull。プリミティブ型のデフォルト。

プリミティブ型のデフォルト値は、Oracleの Javaチュートリアル で説明されています。

 Primitive       Default Value
-------------------------------
 byte            0
 short           0
 int             0
 long            0L
 float           0.0f
 double          0.0d
 char            '\u0000'
 boolean         false

既にご存知のように、この動作は @DefaultValue アノテーションを次のように使用することで変更できます。

@GET
@Path("/foo")
public String myMethod(@DefaultValue("foo") @QueryParam("valString") String valString,
                       @DefaultValue("1") @QueryParam("valInt") int valInt,
                       @DefaultValue("true") @QueryParam("valBool") boolean valBool) {
    ....
}
63
cassiomolin

値はnull0false、つまり、これらのタイプの初期化されていない変数のデフォルト値。クライアントがURLにパラメーターを配置せず、サービスがデフォルト値を指定しない場合、サービスが取得するのは、初期化されていない変数のJavaデフォルト値です。

2