48

たとえば、次の Java レスト定義があるとします。

@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=?)

4

2 に答える 2

98

簡潔な答え

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

  • valString:null
  • valInt:0
  • valBool:false

もう少し長い答え

リクエストパラメータの抽出に関する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) {
    ....
}
于 2016-02-25T11:08:01.240 に答える
2

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

于 2016-02-25T11:05:42.873 に答える