欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Java中的參數(shù)驗證方法

這篇文章主要講解了“Java中的參數(shù)驗證方法”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Java中的參數(shù)驗證方法”吧!

10年積累的成都做網(wǎng)站、網(wǎng)站建設(shè)經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有巴林右旗免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

1. Java中的參數(shù)驗證(非Spring版)

1.1. 前言

  • 為什么我總遇到這種非正常問題,我們知道很多時候我們的參數(shù)校驗都是放在controller層的傳入?yún)?shù)進(jìn)行校驗,我們常用的校驗方式就是引入下列的jar包,在參數(shù)中添加@Validated,并對Bean對象的參數(shù)做不同的注解處理就行,對Spring這種常用做法大家應(yīng)該比較熟了

  • 但我現(xiàn)在遇到的需求,因為boss追求通用性,我們的controller入口只有一個,是通過傳入?yún)?shù)中的不同tradeCode來區(qū)分調(diào)用哪個服務(wù),這時我校驗參數(shù)就得放到具體的每個服務(wù)方法上了,這樣經(jīng)過我的測試,加該注解已經(jīng)不起作用了

    <!--jsr 303-->
    <dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.1.0.Final</version>
    </dependency>
    @PostMapping("/save/valid")
    public RspDTO save(@RequestBody @Validated UserDTO userDTO) {
        userService.save(userDTO);
        return RspDTO.success();
    }
@Data
public class UserDTO implements Serializable {

    private static final long serialVersionUID = 1L;

    /*** 用戶ID*/
    @NotNull(message = "用戶id不能為空")
    private Long userId;
    
    /** 用戶名*/
    @NotBlank(message = "用戶名不能為空")
    @Length(max = 20, message = "用戶名不能超過20個字符")
    @Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用戶昵稱限制:最多20字符,包含文字、字母和數(shù)字")
    private String username;
    
    /** 手機號*/
    @NotBlank(message = "手機號不能為空")
    @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手機號格式有誤")
    private String mobile;

    /**性別*/
    private String sex;

    /** 郵箱*/
    @NotBlank(message = "聯(lián)系郵箱不能為空")
    @Email(message = "郵箱格式不對")
    private String email;

    /** 密碼*/
    private String password;

    /*** 創(chuàng)建時間 */
    @Future(message = "時間必須是將來時間")
    private Date createTime;

}

1.2. 方案

  • 不能用它的注解,但我們可以用它的方法,下面我寫了一個用Java代碼驗證參數(shù)的例子,拋磚引玉,并不能直接用在自己的系統(tǒng)哦,想要使用請結(jié)合自己系統(tǒng)封裝方法,我打算做成注解的形式,利用spring aop切我的服務(wù)層,實現(xiàn)的效果就和controller層類似了

1.2.1. 主方法

import org.springframework.validation.annotation.Validated;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.Date;
import java.util.Set;
import java.util.stream.Stream;

/**
 * @author laoliangliang
 * @date 2019/10/22 15:19
 */
public class ValidLearn {
    public static void main(String[] args) {
        ValidLearn learn = new ValidLearn();
        learn.testValid(new Order().setIdcard("33062119981012361X").setName("  ").setCreateDate(new Date()));
    }

    public void testValid(@Validated Order order) {
        ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
        Validator validator = validatorFactory.getValidator();
        //分組Insert.class則id為空不檢驗
        Set<ConstraintViolation<Order>> validate = validator.validate(order, Insert.class);
        Stream.of(validate).forEach(action -> {
            for (ConstraintViolation<Order> orderConstraintViolation : action) {
                String message = orderConstraintViolation.getMessage();
                System.out.println(message);
            }
        });
    }
}

1.2.2. 實體類

/**
 * @author laoliangliang
 * @date 2019/10/21 16:44
 */
@Data
@Accessors(chain = true)
public class Order {

    @NotNull(message = "id不能為空",groups = Update.class)
    private Long id;

    @NotEmpty(message = "name is not null",groups = Insert.class)
    private String name;

    @Future(message = "必須之后的時間")
    private Date createDate;

    @IdCardValid(message = "idcard 不合法")
    private String idcard;
}
  • 以上兩個代碼就可以做到檢驗實體類對象注解,并打印校驗不通過的消息了,可以改造成存在校驗錯誤消息則拋出異常

  • 代碼還涉及了一些細(xì)節(jié),比如group分組和自定義注解

1.2.3. group分組

import javax.validation.groups.Default;

/**
 * @author laoliangliang
 * @date 2019/10/22 16:32
 */
public interface Update extends Default {
}
import javax.validation.groups.Default;

/**
 * @author laoliangliang
 * @date 2019/10/22 16:32
 */
public interface Insert extends Default {
}
  • 我例子代碼中用到了Insert.class,表示做插入動作時,存在這個分組的注解才會起作用,因此我id不傳,id不為空的注解也不會起作用

1.2.4. 自定義注解

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author laoliangliang
 * @date 2019/10/22 15:55
 */
public class IdCardValidator implements ConstraintValidator<IdCardValid, Object> {

    private Pattern pattern = Pattern.compile("^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])" +
            "\\d{3}$|^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}([0-9]|X)$");
    @Override
    public void initialize(IdCardValid idCardValid) {
    }

    @Override
    public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
        Matcher matcher = pattern.matcher(o.toString());
        return matcher.matches();
    }
}
/**
 * @author laoliangliang
 * @date 2019/10/22 15:53
 */
@Documented
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = IdCardValidator.class)
public @interface IdCardValid {

    String message() default "身份證不合法";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
  • 這里我以驗證身份證號為例,寫了個自定義注解,實現(xiàn)ConstraintValidator接口,在isValid方法中實現(xiàn)自定義邏輯即可使用注解

1.3. 總結(jié)

  • 此篇舉了Validation用Java代碼實現(xiàn)驗證的例子,應(yīng)對service層參數(shù)驗證,實際應(yīng)用到自己代碼可以自己寫個自定義注解,實現(xiàn)aop切面,在切面中進(jìn)行驗證

感謝各位的閱讀,以上就是“Java中的參數(shù)驗證方法”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Java中的參數(shù)驗證方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

分享題目:Java中的參數(shù)驗證方法
網(wǎng)站URL:http://chinadenli.net/article36/iegdsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、App設(shè)計、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司
亚洲男人的天堂色偷偷| 国产综合香蕉五月婷在线| 亚洲人妻av中文字幕| 九九热视频免费在线视频| 日本中文在线不卡视频| 区一区二区三中文字幕| 91偷拍裸体一区二区三区| 午夜福利视频日本一区| 成人日韩在线播放视频| 美女被后入福利在线观看| 国产成人精品一区二区三区| 精品国产亚洲av成人一区| 又黄又硬又爽又色的视频| 人妻精品一区二区三区视频免精| 精品人妻一区二区三区免费| 1024你懂的在线视频| 国产乱久久亚洲国产精品| 精品欧美国产一二三区| 国产亚洲精品久久久优势| 国产亚洲成av人在线观看| 91久久国产福利自产拍| 在线观看免费视频你懂的| 国产性情片一区二区三区| 国内精品伊人久久久av高清| 午夜精品福利视频观看| 亚洲国产一级片在线观看| 欧美人与动牲交a精品| 又大又长又粗又猛国产精品| 99国产成人免费一区二区| 台湾综合熟女一区二区| 老富婆找帅哥按摩抠逼视频| 久久三级国外久久久三级| 国产日韩欧美在线亚洲| 亚洲熟妇熟女久久精品| 日韩女优精品一区二区三区| 午夜精品国产精品久久久| 少妇人妻一级片一区二区三区| 国产亚洲精品香蕉视频播放| 出差被公高潮久久中文字幕| 欧美黑人精品一区二区在线| 精品al亚洲麻豆一区|