摘要:校驗器可以通過對象報告校驗失敗的信息接口定義示例如下,可以使用等工具測試用戶名不能為空常用注解也可以自定義注解及其校驗規則獲取并初始化注解信息設置自定義校驗規則人的姓名不能為空參考
Java后端常用的校驗框架 Apache commons-validatorQ: 為什么后端需要校驗,只交給前端校驗行不行
A: 前后端都需要校驗
后端校驗防止請求過來的非法數據,對后端進行破壞
http://commons.apache.org/ 這個地址apache提供了常用的工具類,包括校驗框架
提供了大量的校驗器,如時間、數值、正則表達式、郵箱、URL等待
以IntegerValidator為例
IntegerValidator integerValidator = new IntegerValidator(); Integer value = integerValidator.validate("10"); System.out.println(value); value = integerValidator.validate("G"); System.out.println(value);
/** *Validate/convert an
Integer
using the default *Locale
. * * @param value The value validation is being performed on. * @return The parsedInteger
if valid ornull
* if invalid. */ public Integer validate(String value) { return (Integer)parse(value, (String)null, (Locale)null); }
在校驗傳入的參數時,當能夠解析成Integer類型就返回這個數字,如果不能就返回null
其它數值類型校驗類似
Spring ValidatorSpring框架提供的用于校驗對象的Validator接口,在校驗過程中與Errors對象配合。校驗器可以通過Errors對象報告校驗失敗的信息
org.springframework.validation.Validator接口定義
public interface Validator { /** * Can this {@link Validator} {@link #validate(Object, Errors) validate} * instances of the supplied {@code clazz}? *This method is typically implemented like so: *
return Foo.class.isAssignableFrom(clazz);* (Where {@code Foo} is the class (or superclass) of the actual * object instance that is to be {@link #validate(Object, Errors) validated}.) * @param clazz the {@link Class} that this {@link Validator} is * being asked if it can {@link #validate(Object, Errors) validate} * @return {@code true} if this {@link Validator} can indeed * {@link #validate(Object, Errors) validate} instances of the * supplied {@code clazz} */ boolean supports(Class> clazz); /** * Validate the supplied {@code target} object, which must be * of a {@link Class} for which the {@link #supports(Class)} method * typically has (or would) return {@code true}. *The supplied {@link Errors errors} instance can be used to report * any resulting validation errors. * @param target the object that is to be validated (can be {@code null}) * @param errors contextual state about the validation process (never {@code null}) * @see ValidationUtils */ void validate(Object target, Errors errors);
示例如下,可以使用POSTMAN等工具測試
package com.adagio.domain; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; public class Person { @NotNull private String name; @Min(0) @Max(150) private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package com.adagio.validator; import org.springframework.util.StringUtils; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import com.adagio.domain.Person; public class PersonValidator implements Validator { @Override public boolean supports(Class> clazz) { return Person.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { Person person = Person.class.cast(target); String name = person.getName(); if(!StringUtils.hasLength(name)){ errors.reject("person.name.not.null", "用戶名不能為空"); } } }
package com.adagio.controller; import javax.validation.Valid; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import com.adagio.domain.Person; @Controller public class PersonController { @PostMapping("/person/save") public Person save(@Valid @RequestBody Person person){ return person; } }Bean Validation 1.0(JSR-303)
常用注解:@Valid、@NotNull、@Null、@Size、@Min、@Max
也可以自定義注解及其校驗規則
package com.adagio.validator; import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.validation.Constraint; import javax.validation.Payload; @Target({METHOD, FIELD}) @Retention(RUNTIME) @Documented @Constraint(validatedBy = {PersonNameConstraintValidator.class}) public @interface PersonName { String message() default "{person.name.not.null}"; Class>[] groups() default {}; Class extends Payload>[] payload() default {}; }
package com.adagio.validator; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class PersonNameConstraintValidator implements ConstraintValidator{ /** * 獲取并初始化注解信息 */ @Override public void initialize(PersonName constraintAnnotation) { } /** * 設置自定義校驗規則 */ @Override public boolean isValid(String value, ConstraintValidatorContext context) { return false; } }
person.name.not.null=人的姓名不能為空
參考:https://segmentfault.com/l/15...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67848.html
摘要:表達式語言依賴關系提供對變量插值的支持,允許在違規消息中使用表達式。這是當相應屬性的值未通過驗證時通常會呈現的消息。任何違反對象中定義的約束的行為都將作為返回。案例結論本文重點介紹了標準的簡單傳遞,并使用注釋和說明了驗證的基礎知識。 案例概述 在這本文中,我們將介紹使用標準框架驗證Java bean的基礎知識 - JSR 380,也稱為Bean Validation 2.0。 當然,驗...
摘要:下面以某個短信接口為例講解。例如,上面的短信模板的信息應為歐陽科技登錄驗證碼,如非本人操作,請忽略此短信。,為占位符,是你的短信驗證碼。驗證碼通知短信提交請求創建驗證碼驗證碼上面這些是主要的類,還有其他的類在文章末尾給出源代碼。 手機短信驗證現在在各種系統可以說都是用的非常普遍的,這個可能是方便和安全性的考慮,所以才廣泛的使用,這篇文章就以一個短信接口的實例,來講解一下怎么使用短信接口...
摘要:我們平時開發時經常會遇到需要圖片驗證碼,基礎的驗證碼包括了數字字母甚至可能有漢字。下面我給出一個簡單的工具類。驗證碼生成器圖片的寬度。 我們平時開發時經常會遇到需要圖片驗證碼,基礎的驗證碼包括了數字、字母、甚至可能有漢字。下面我給出一個簡單的工具類。 package com..ankang.tony.util; import java.awt.Color; import java....
摘要:的身份驗證器一般也是用于登錄進行兩步驗證,和蘋果的兩步驗證是同樣的道理。只不過的身份驗證器用得更多更廣泛,如的兩步驗證都是基于身份驗證器。使用我們來看下上的使用身份驗證器開啟兩步驗證的應用。 兩步驗證 大家應該對兩步驗證都熟悉吧?如蘋果有自帶的兩步驗證策略,防止用戶賬號密碼被盜而鎖定手機進行敲詐,這種例子屢見不鮮,所以蘋果都建議大家開啟兩步驗證的。 Google 的身份驗證器一般也是用...
摘要:類加載器類加載器執行的操作就是上述加載階段做的事,通過一個類的全限定名來獲取定義這個類的二進制字節流,類加載器可以分為下列三種。應用程序類加載器,也稱為系統類加載器。 類加載流程: showImg(https://segmentfault.com/img/bV8SRP?w=1152&h=388);從上面這幅圖可以看出一個類從加載到卸載有7個階段,其中驗證、準備和解析這三個步驟統稱為連接...
摘要:驗證驗證階段的主要目的是為了確保文件的字節流中包含的信息符合當前虛擬機的要求,并且不會危害虛擬機自身的安全。不同的虛擬機對類驗證的實現可能會有所不同,但大致都會完成以下四個階段的驗證文件格式的驗證元數據的驗證字節碼驗證和符號引用驗證。 原文地址 虛擬機把描述類的數據從Class文件加載到內存,并對數據進行校驗,轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,Thisis ...
閱讀 1898·2021-11-24 09:39
閱讀 2134·2021-09-22 15:50
閱讀 1991·2021-09-22 14:57
閱讀 700·2021-07-28 00:13
閱讀 1065·2019-08-30 15:54
閱讀 2356·2019-08-30 15:52
閱讀 2686·2019-08-30 13:07
閱讀 3787·2019-08-30 11:27