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