背景
必須ではないリクエストパラメータに対して、@Size
を指定した場合、そのパラメータにnull
を渡したらエラーになるのか気になり調べた。
1. @Size
の動作とnull
の扱い
@Size
アノテーションは、対象となるフィールドの文字列の長さを制約しますが、null
に対しては制約を適用しません。
つまり、@Size(min=10, max=12)
が付与されたフィールドにnull
が渡された場合、エラーにはならず、バリデーションはスキップされます。
例:
import javax.validation.constraints.Size;
public class ExampleRequest {
// 必須ではないが、値がある場合は最小10桁、最大12桁に制限
@Size(min = 10, max = 12)
private String param;
// Getter and Setter
}
上記のコードでは、param
フィールドがnull
の場合には、@Size
のバリデーションは行われません。値がnull
であることはエラーにはならず、null
は許容されます。
2. null
を許容しない場合の設定
もしnull
を許容せずに、null
値の場合にもエラーにしたい場合には、@NotNull
アノテーションを併用します。
例:null
を許容しない
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class ExampleRequest {
@NotNull // nullは許容しない
@Size(min = 10, max = 12) // 最小10桁、最大12桁
private String param;
// Getter and Setter
}
このようにすると、param
フィールドがnull
の場合にはエラーが発生し、バリデーションに失敗します。
3. 結論
-
@Size(min=10, max=12)
を使用している場合、リクエストパラメータがnull
であってもエラーにはなりません。null
値は許容され、バリデーションはスキップされます。 -
null
をエラーとして扱いたい場合は、@NotNull
を併用する必要があります。