摘要:校驗(yàn)器可以通過(guò)對(duì)象報(bào)告校驗(yàn)失敗的信息接口定義示例如下,可以使用等工具測(cè)試用戶名不能為空常用注解也可以自定義注解及其校驗(yàn)規(guī)則獲取并初始化注解信息設(shè)置自定義校驗(yàn)規(guī)則人的姓名不能為空參考
Java后端常用的校驗(yàn)框架 Apache commons-validatorQ: 為什么后端需要校驗(yàn),只交給前端校驗(yàn)行不行
A: 前后端都需要校驗(yàn)
后端校驗(yàn)防止請(qǐng)求過(guò)來(lái)的非法數(shù)據(jù),對(duì)后端進(jìn)行破壞
http://commons.apache.org/ 這個(gè)地址apache提供了常用的工具類,包括校驗(yàn)框架
提供了大量的校驗(yàn)器,如時(shí)間、數(shù)值、正則表達(dá)式、郵箱、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); }
在校驗(yàn)傳入的參數(shù)時(shí),當(dāng)能夠解析成Integer類型就返回這個(gè)數(shù)字,如果不能就返回null
其它數(shù)值類型校驗(yàn)類似
Spring ValidatorSpring框架提供的用于校驗(yàn)對(duì)象的Validator接口,在校驗(yàn)過(guò)程中與Errors對(duì)象配合。校驗(yàn)器可以通過(guò)Errors對(duì)象報(bào)告校驗(yàn)失敗的信息
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等工具測(cè)試
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
也可以自定義注解及其校驗(yàn)規(guī)則
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) { } /** * 設(shè)置自定義校驗(yàn)規(guī)則 */ @Override public boolean isValid(String value, ConstraintValidatorContext context) { return false; } }
person.name.not.null=人的姓名不能為空
參考:https://segmentfault.com/l/15...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/67848.html
摘要:表達(dá)式語(yǔ)言依賴關(guān)系提供對(duì)變量插值的支持,允許在違規(guī)消息中使用表達(dá)式。這是當(dāng)相應(yīng)屬性的值未通過(guò)驗(yàn)證時(shí)通常會(huì)呈現(xiàn)的消息。任何違反對(duì)象中定義的約束的行為都將作為返回。案例結(jié)論本文重點(diǎn)介紹了標(biāo)準(zhǔn)的簡(jiǎn)單傳遞,并使用注釋和說(shuō)明了驗(yàn)證的基礎(chǔ)知識(shí)。 案例概述 在這本文中,我們將介紹使用標(biāo)準(zhǔn)框架驗(yàn)證Java bean的基礎(chǔ)知識(shí) - JSR 380,也稱為Bean Validation 2.0。 當(dāng)然,驗(yàn)...
摘要:下面以某個(gè)短信接口為例講解。例如,上面的短信模板的信息應(yīng)為歐陽(yáng)科技登錄驗(yàn)證碼,如非本人操作,請(qǐng)忽略此短信。,為占位符,是你的短信驗(yàn)證碼。驗(yàn)證碼通知短信提交請(qǐng)求創(chuàng)建驗(yàn)證碼驗(yàn)證碼上面這些是主要的類,還有其他的類在文章末尾給出源代碼。 手機(jī)短信驗(yàn)證現(xiàn)在在各種系統(tǒng)可以說(shuō)都是用的非常普遍的,這個(gè)可能是方便和安全性的考慮,所以才廣泛的使用,這篇文章就以一個(gè)短信接口的實(shí)例,來(lái)講解一下怎么使用短信接口...
摘要:我們平時(shí)開發(fā)時(shí)經(jīng)常會(huì)遇到需要圖片驗(yàn)證碼,基礎(chǔ)的驗(yàn)證碼包括了數(shù)字字母甚至可能有漢字。下面我給出一個(gè)簡(jiǎn)單的工具類。驗(yàn)證碼生成器圖片的寬度。 我們平時(shí)開發(fā)時(shí)經(jīng)常會(huì)遇到需要圖片驗(yàn)證碼,基礎(chǔ)的驗(yàn)證碼包括了數(shù)字、字母、甚至可能有漢字。下面我給出一個(gè)簡(jiǎn)單的工具類。 package com..ankang.tony.util; import java.awt.Color; import java....
摘要:的身份驗(yàn)證器一般也是用于登錄進(jìn)行兩步驗(yàn)證,和蘋果的兩步驗(yàn)證是同樣的道理。只不過(guò)的身份驗(yàn)證器用得更多更廣泛,如的兩步驗(yàn)證都是基于身份驗(yàn)證器。使用我們來(lái)看下上的使用身份驗(yàn)證器開啟兩步驗(yàn)證的應(yīng)用。 兩步驗(yàn)證 大家應(yīng)該對(duì)兩步驗(yàn)證都熟悉吧?如蘋果有自帶的兩步驗(yàn)證策略,防止用戶賬號(hào)密碼被盜而鎖定手機(jī)進(jìn)行敲詐,這種例子屢見不鮮,所以蘋果都建議大家開啟兩步驗(yàn)證的。 Google 的身份驗(yàn)證器一般也是用...
摘要:類加載器類加載器執(zhí)行的操作就是上述加載階段做的事,通過(guò)一個(gè)類的全限定名來(lái)獲取定義這個(gè)類的二進(jìn)制字節(jié)流,類加載器可以分為下列三種。應(yīng)用程序類加載器,也稱為系統(tǒng)類加載器。 類加載流程: showImg(https://segmentfault.com/img/bV8SRP?w=1152&h=388);從上面這幅圖可以看出一個(gè)類從加載到卸載有7個(gè)階段,其中驗(yàn)證、準(zhǔn)備和解析這三個(gè)步驟統(tǒng)稱為連接...
摘要:驗(yàn)證驗(yàn)證階段的主要目的是為了確保文件的字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會(huì)危害虛擬機(jī)自身的安全。不同的虛擬機(jī)對(duì)類驗(yàn)證的實(shí)現(xiàn)可能會(huì)有所不同,但大致都會(huì)完成以下四個(gè)階段的驗(yàn)證文件格式的驗(yàn)證元數(shù)據(jù)的驗(yàn)證字節(jié)碼驗(yàn)證和符號(hào)引用驗(yàn)證。 原文地址 虛擬機(jī)把描述類的數(shù)據(jù)從Class文件加載到內(nèi)存,并對(duì)數(shù)據(jù)進(jìn)行校驗(yàn),轉(zhuǎn)換解析和初始化,最終形成可以被虛擬機(jī)直接使用的Java類型,Thisis ...
閱讀 1923·2021-11-24 09:39
閱讀 2145·2021-09-22 15:50
閱讀 2024·2021-09-22 14:57
閱讀 712·2021-07-28 00:13
閱讀 1077·2019-08-30 15:54
閱讀 2368·2019-08-30 15:52
閱讀 2695·2019-08-30 13:07
閱讀 3794·2019-08-30 11:27