如何在使用类的setter赋值时验证类/bean类的变量



我对Java和Spring Boot非常陌生,并试图对如下所示的类的变量进行验证,并且希望在使用类的setter初始化值的同时验证每个变量。

import javax.validation.constraints.Digits;
import javax.validation.constraints.Size;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
public class LoanRequestBean {
@Size(max = 8)
String uniqueRefBancs;
@Digits(integer=2)
Integer loanId;
@Size(max = 20)
String loanIban;
}

变量初始化由setter完成,如下所示。

import org.springframework.stereotype.Component;
@Component
public class BancsRequestRecords {
private String[] fieldsArray;
@Valid
LoanRequestBean loanRequest = new LoanRequestBean();

public loanRequestBean RequestParser(String message) {
fieldsArray = message.split("¬");
loanRequest.setUniqueRefBancs(fieldsArray[0]);
loanRequest.setLoanId(Integer.valueOf( fieldsArray[1]));
loanRequest.setLoanIban(fieldsArray[2]);
return loanRequest;
}
}

当我尝试调用Requestparser方法时,该方法的参数中的消息为22028110600000001000752-123456–FI9080706050403020,则不会验证这些值。例如:uniqueRefBancs的最大长度为8,但在初始化时仍然不会抛出任何错误。如果这是验证变量的正确方法或任何其他方法,你能帮助我吗?

Bean验证是在方法参数上使用@Valid或@Validated注释时执行的。此处提供更多详细信息。您可以使用一种方法来验证您的loanRequestBean。若要检查验证结果,可以使用BindingResult。编辑:不相关,但我会考虑将loanRequestBean重命名为loanRequestBean,以遵循java类名约定。

您需要以编程方式触发loanRequest对象的验证,如下所示:

import org.springframework.stereotype.Component;
@Component
public class BancsRequestRecords {
private LoanRequestBean loanRequest = new LoanRequestBean();
private Validator validator;
public BancsRequestRecords(Validator validator) {
this.validator = validator;
}

public loanRequestBean RequestParser(String message) {
String[] fieldsArray = message.split("¬");
loanRequest.setUniqueRefBancs(fieldsArray[0]);
loanRequest.setLoanId(Integer.valueOf( fieldsArray[1]));
loanRequest.setLoanIban(fieldsArray[2]);
Set<ConstraintViolation<LoanRequestBean>> violations = validator.validate(loanRequest);
return loanRequest;
}
}

你可以在https://www.baeldung.com/javax-validation#programmatic.

最新更新