web-dev-qa-db-ja.com

正の整数を検証する

ゼロを含む数値フィールドに正の整数のみを許可したいのですが、JSR 303を使用してこの検証を定義するにはどうすればよいですか?.
私は試した

  1. @Min(value=0 message = "msg1")-しかし、1.2のようなfloat値を許可します。

  2. @Digits(fraction = 0, integer = 10, message ="msg2")-負の値を受け入れます。

  3. @Min(value=0, message = "msg1" )
    @Digits(fraction = 0, integer = 10, message ="msg2")-正常に機能しますが、両方のメッセージ、つまりmsg1およびmsg2が表示されます。

助言がありますか?

ありがとう!

17
xyz

自然数を探しているようですが、正規表現パターンを使用して目的の出力を取得できると思います。何かのようなもの

@Pattern(regexp = "[\\s]*[0-9]*[1-9]+",message="msg")

15
jay

注釈@Min Bean内:

@Min(value = 0L, message = "The value must be positive")
private Double value;
35
Rodrigo Araujo

Hibernate-validatorを使用する場合は、@ConstraintComposition(AND)を使用して、3番目のオプションの@Min@Digitsを組み合わせたカスタム制約を作成できます。 @ReportAsSingleViolationを追加すると、カスタムメッセージのみが表示されます。

4
Slava Semushin

正の数には以下のような範囲注釈を使用する方が良い

@Range(min = 0l, message = "Please select positive numbers Only")

負の数の場合

@Range(min = -9223372036854775808l, max = 0l, message = "Please select Negative numbers Only")
1
Nikhil Kumar K

これは回答のコード例です https://stackoverflow.com/a/41675990/258544 上記

@Documented
@Min(value=0, message = "add a min msg" )
@Digits(fraction = 0, integer = 10, message ="add a digit msg")
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {})
@ReportAsSingleViolation
public @interface NumberFormatValidator {

    String message() default "invalid number";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

}

制約構成 http://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/#validator-customconstraints-compound@ReportAsSingleViolation両方のメッセージのdsiplayを回避する

0