JavaBean条件验证

JavaBean条件验证,java,spring,javabeans,bean-validation,Java,Spring,Javabeans,Bean Validation,我有一个具有两个属性的类。我想使用JavaBean验证,但运行时遇到了一个问题:如何进行验证 class ProductRequest { private String quantityType; private double quantityValue; //getters and setters } 我想基于以下条件使用JavaBean验证。 如果“quantityType”等于“foo”,则将“quantityValue”的最大大小限制为5 否则“quantityT

我有一个具有两个属性的类。我想使用JavaBean验证,但运行时遇到了一个问题:如何进行验证

class ProductRequest {

   private String quantityType;
   private double quantityValue;

   //getters and setters
}
我想基于以下条件使用JavaBean验证。 如果“quantityType”等于“foo”,则将“quantityValue”的最大大小限制为5 否则“quantityType”等于“bar”,将“quantityValue”的最大大小限制为3

在这种情况下,最好的方法是什么?

import javax.validation.constraints.AssertTrue;
import javax.validation.constraints.AssertTrue;


@AssertTrue
public boolean isBothFieldsValid() {
    if (quantityType.equals("foo")) {
        return quantityValue < 5;
    } else if (quantityType.equals("bar")) {
        return quantityValue < 3;
    }
    return false;
}
@资产真实 公共布尔值isBothFieldsValid(){ if(quantityType.equals(“foo”)){ 返回数量值<5; }else if(quantityType.equals(“bar”)){ 返回数量值<3; } 返回false; }
编辑:

从评论中回答问题。您可以尝试同时使用两种方法:

@AssertTrue(message = "quantity should be below 5 for foo")
public boolean isQuantityValidForFoo() {
    if (quantityType.equals("foo")) {
        return quantityValue < 5;
    }
    return true;
}

@AssertTrue(message = "quantity should be below 3 for bar")
public boolean isQuantityValidForBar() {
    if (quantityType.equals("bar")) {
        return quantityValue < 3;
    }
    return true;
}
@AssertTrue(message=“对于foo,数量应低于5”)
公共布尔值isQuantityValidForFoo(){
if(quantityType.equals(“foo”)){
返回数量值<5;
}
返回true;
}
@AssertTrue(message=“对于bar,数量应低于3”)
公共布尔值isQuantityValidForBar(){
if(quantityType.equals(“bar”)){
返回数量值<3;
}
返回true;
}

您需要一个自定义验证程序谢谢Jayesh的评论,我正在尝试在没有自定义验证的情况下实现。为了确保Krystian,我需要在同一个模型类上添加此方法,对吗?如何触发输入验证?是的,将其添加到ProductRequest类。我假设您已经在使用诸如“@NotNull”之类的验证注释,而这个注释的工作原理完全相同。它作为新字段
@AssertTrue private boolean bothFieldsValid的getter。谢谢,成功了!您有没有想过根据这些条件为@AssertTrue的false条件设置不同的消息?i、 e如果等于“foo”且数量>=5,@AssertTrue(message=“对于foo,数量应低于5”),如果等于“bar”且数量>=3,则@AssertTrue(message=“对于bar,数量应低于3”)?完美!这就是我一直在寻找的方式。谢谢,Krystian。