0
我正在研究hibernate-validator和validation-api库,我想验证类型为Integer的字段名称,当用户使用String类型输入时,我的问题原因。它使用null和empty。如果你曾经有过这个问题,你能告诉我解决问题的方法吗?休眠验证Integer字段
@Entity
@Table(name = "shops")
public class Shop {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@Column(name = "employees_number")
private Integer emplNumber;
// getter and setter
}
@Component
public class ShopValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return Shop.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Shop shop = (Shop) target;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "shop.name.empty");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "emplNumber", "shop.emplNumber.empty");
if (!NumberUtils.isNumeric(shop.getEmplNumber().toString())) {
errors.rejectValue("emplNumber", "shop.emplNumber.invalid");
}
}
}
public class NumberUtils {
public static boolean isNumeric(String isNum) {
try {
return isNum.matches("[1-9]+");
} catch (NullPointerException e) {
return false;
}
}
}
Here is picture I need to validate
的你的工作变型和注释逐一场时方法。但在我当前的代码中,我使用@InitBinder来验证一个类。如果将类型更改为字符串,则使用当前代码完成这些代码,不再需要添加更多代码。问题是你有什么办法来验证,但仍然保持Integer类型?因为我希望这种类型与db中的类型映射。 – anhngoquoc
'emplNumber'是'Integer',所以它不能是'String',你不能从你的表单传递String值。您可以将其更改为字符串并使用'@Type'注释。或者你可以保留它作为'Integer',但不允许输入任何东西,除了你的页面上的数值和一些JS或''HTML5 – Uata
也许改变类型为String是最好的方式和适合与当前的代码。 “在HTML5中的JS或 - >我试过这个方法,但是如果用户禁用js或f12编辑类型属性输入然后提交,它仍然会导致问题。这只是一个简单的项目,但如果客户为我们分配了一个项目并且他们只想开发更多项目,他们不希望编辑的东西存在。或者他们输入的测试人员以他们想要的形式输入,这会继续引发问题。也许我很复杂:)。感谢您的帮助。 – anhngoquoc