自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

入?yún)⑿r?yàn),你還在寫 If-Else?Out了!快來(lái)看看這個(gè)吧

開(kāi)發(fā) 前端
當(dāng)服務(wù)端接口一拿到前臺(tái)的入?yún)ⅲ闶遣皇巧先ゾ烷_(kāi)始堆積if-else,十多行代碼下去,發(fā)現(xiàn)全判斷校驗(yàn)參數(shù)了,還沒(méi)進(jìn)入正常的業(yè)務(wù)邏輯。想要優(yōu)雅一點(diǎn)嗎?那就一起隨小編一起來(lái)學(xué)習(xí)吧!

背景

當(dāng)服務(wù)端接口一拿到前臺(tái)的入?yún)?,你是不是上去就開(kāi)始堆積if-else,十多行代碼下去,發(fā)現(xiàn)全判斷校驗(yàn)參數(shù)了,還沒(méi)進(jìn)入正常的業(yè)務(wù)邏輯。雖然功能沒(méi)啥毛病,但看起來(lái)太冗長(zhǎng),被后來(lái)者看到,那是免不了一頓吐槽的!想要優(yōu)雅一點(diǎn)嗎?那就一起隨小編一起來(lái)學(xué)習(xí)使用

spring-boot-starter-validation進(jìn)行參數(shù)校驗(yàn)!

優(yōu)點(diǎn)

  • controller層的代碼看起來(lái)干凈整潔
  • spring-boot-starter-validation本身內(nèi)置了一些注解可以直接使用,比如@NotNull,@NotBlank,@Size等
  • 支持自定義注解,靈活方便

搭建

pom引入依賴包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

常用注解

@NotNull
@NotBlank
@NotEmpty
@Size

自定義注解

/**
* 時(shí)間屬性格式校驗(yàn)
* @author:liyajie
* @createTime:2022/1/20 10:38
* @version:1.0
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER,ElementType.FIELD})
@Constraint(validatedBy = DateValidator.Validator.class)
public @interface DateValidator {
// 校驗(yàn)未通過(guò)時(shí)的返回信息
String message() default "日期格式不正確";

// 以下兩行為固定模板
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
* 預(yù)期日期格式
*/
String expectValue();

@Slf4j
class Validator implements ConstraintValidator<DateValidator, String> {

private String expectValue;

@Override
public void initialize(DateValidator dateValidator) {
expectValue = dateValidator.expectValue();
}

@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
boolean flag = false;
/**
* 為空直接通過(guò),只做格式驗(yàn)證
*/
if(Strings.isNullOrEmpty(value)){
return true;
}
try {
Date date = DateUtil.formatStr2Date(value, expectValue);
flag = true;
}catch (RuntimeException e){
log.warn("DateValidator 日期格式不正確");
e.printStackTrace();
}
return flag;
}
}
}

測(cè)試

注意點(diǎn)

校驗(yàn)不通過(guò)時(shí),會(huì)直接拋出異常,程序?qū)⑼V箞?zhí)行下面的邏輯,這樣是不合理的,所以我們要捕獲異常,并進(jìn)行處理,方案如下: 全局捕獲異常,并統(tǒng)一返回:

/**
* 全局異常處理
* @author: zhanglei
* @version: 1.0
* @date: 2021/5/18 20:27
*/
@ControllerAdvice
@Slf4j
public class GlobalExceptionHandler {

/**
* 校驗(yàn)異常
* @author: liyajie
* @date: 2022/1/20 13:07
* @param e
* @return com.lyj.validates.common.R
* @exception:
* @update:
* @updatePerson:
**/
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseBody
public R exceptionHandler(MethodArgumentNotValidException e) {
log.error("exceptionHandler info:", e);
BindingResult bindingResult = e.getBindingResult();
StringBuilder builder = new StringBuilder();
for (FieldError fieldError : bindingResult.getFieldErrors()) {
builder.append(fieldError.getDefaultMessage()).append("!");
}
log.error("message : {}",builder.toString());
return new R("500",builder.toString());
}
}


責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2024-06-03 00:00:06

高性能數(shù)據(jù)傳輸應(yīng)用程序

2022-11-28 07:32:46

迭代器remove數(shù)據(jù)庫(kù)

2021-06-10 10:33:22

Jenkins持續(xù)集成工具自動(dòng)化

2022-05-12 15:17:09

GPU微軟神經(jīng)網(wǎng)絡(luò)

2023-10-30 08:18:21

內(nèi)存泄漏Java

2021-04-19 09:23:26

數(shù)字化

2020-12-25 10:35:42

編程語(yǔ)言C語(yǔ)言Java

2020-08-04 07:02:00

TCPIP算法

2018-02-24 14:59:39

區(qū)塊鏈公共區(qū)塊鏈私有區(qū)塊鏈

2018-02-25 23:12:16

2019-12-11 16:36:09

編程語(yǔ)言排行榜Python

2019-09-06 10:31:45

軟件開(kāi)發(fā)地圖

2018-03-06 09:54:48

數(shù)據(jù)庫(kù)備份恢復(fù)

2018-05-02 15:41:27

JavaScript人臉檢測(cè)圖像識(shí)別

2023-06-02 07:30:24

If-else結(jié)構(gòu)流程控制

2020-05-13 14:15:25

if-else代碼前端

2021-01-26 05:11:28

if-else代碼虛函數(shù)

2018-07-30 14:24:16

機(jī)器學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)函數(shù)

2022-04-08 07:29:25

Windows 11微軟新預(yù)覽版
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)