成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java驗(yàn)證

funnyZhang / 3381人閱讀

摘要:校驗(yàn)器可以通過(guò)對(duì)象報(bào)告校驗(yàn)失敗的信息接口定義示例如下,可以使用等工具測(cè)試用戶名不能為空常用注解也可以自定義注解及其校驗(yàn)規(guī)則獲取并初始化注解信息設(shè)置自定義校驗(yàn)規(guī)則人的姓名不能為空參考

Q: 為什么后端需要校驗(yàn),只交給前端校驗(yàn)行不行
A: 前后端都需要校驗(yàn)
后端校驗(yàn)防止請(qǐng)求過(guò)來(lái)的非法數(shù)據(jù),對(duì)后端進(jìn)行破壞

Java后端常用的校驗(yàn)框架 Apache commons-validator

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 parsed Integer if valid or null * 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 Validator

Spring框架提供的用于校驗(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[] 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

相關(guān)文章

  • Java Bean Validation

    摘要:表達(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)...

    Imfan 評(píng)論0 收藏0
  • java實(shí)現(xiàn)手機(jī)短信驗(yàn)證全過(guò)程

    摘要:下面以某個(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)講解一下怎么使用短信接口...

    whjin 評(píng)論0 收藏0
  • 圖片驗(yàn)證碼的JAVA工具類

    摘要:我們平時(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....

    SKYZACK 評(píng)論0 收藏0
  • 兩步驗(yàn)證殺手锏:Java 接入 Google 身份驗(yàn)證器實(shí)戰(zhàn)

    摘要:的身份驗(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)證器一般也是用...

    W4n9Hu1 評(píng)論0 收藏0
  • Java中類加載機(jī)制

    摘要:類加載器類加載器執(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)稱為連接...

    missonce 評(píng)論0 收藏0
  • Java 虛擬機(jī)類加載機(jī)制

    摘要:驗(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 ...

    Dionysus_go 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<