一篇文章教你如何用Java自定義一個(gè)參數(shù)校驗(yàn)器
自定義一個(gè)唯一字段校驗(yàn)器
注解
@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = {IsUniqueValidator.class}) // 指定自定義的校驗(yàn)器 public @interface IsUnique { // 提示信息 String message() default ""; // 不加這倆參數(shù) error msg: contains Constraint annotation, but does not contain a groups parameter. // 必須包含這兩個(gè)參數(shù) Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; // ----- }
校驗(yàn)器
public class IsUniqueValidator implements ConstraintValidator<IsUnique, String> { @Override public void initialize(IsUnique constraintAnnotation) { } /** * 通過該方法,對(duì)參數(shù)進(jìn)行驗(yàn)證,看是否通過。 * @param value 修飾字段的值。 * @param context 上下文 * @return true:驗(yàn)證通過。 false:驗(yàn)證不通過。 */ @Override public boolean isValid(String value, ConstraintValidatorContext context) { // 模擬數(shù)據(jù)庫(kù)判斷是否存在改用戶名 return !"aaaa".equals(value); } }
異常處理
@ControllerAdvice @ResponseBody public class ValidatorExceptionHandler { @ExceptionHandler(value = BindException.class) public Map<String, String> exceptionHandler(BindException e) { List<ObjectError> allErrors = e.getAllErrors(); StringBuilder sb = new StringBuilder(); for (ObjectError error : allErrors) { sb.append(error.getDefaultMessage()); sb.append(", "); } String error = sb.toString(); HashMap<String, String> resp = new HashMap<>(); resp.put("1004", error.substring(0, error.lastIndexOf(","))); return resp; } }
使用, 跟spring提供的用法完全一致
@Data public class User { @NotNull(message = "name不為null") @IsUnique(message = "用戶名是唯一的") private String name; @NotNull private String password; }
@PostMapping public String hello(@RequestBody @Valid User user) { return "hello" + user.getName(); }
測(cè)試
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Java基數(shù)排序radix sort原理及用法解析
這篇文章主要介紹了Java基數(shù)排序radix sort原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06SpringBoot實(shí)現(xiàn)文件下載的四種方式
本文主要介紹了SpringBoot實(shí)現(xiàn)文件下載的四種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-11-11SparkSQL使用IDEA快速入門DataFrame與DataSet的完美教程
本文給大家介紹使用idea開發(fā)Spark SQL 的詳細(xì)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-08-08Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(37)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07java去除中文括號(hào)小括號(hào),或者英文括號(hào)的實(shí)例代碼
這篇文章主要介紹了java去除中文括號(hào)小括號(hào),或者英文括號(hào)的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09Spring Integration 實(shí)現(xiàn)消息驅(qū)動(dòng)的詳細(xì)步驟
Spring Integration是一個(gè)用于構(gòu)建消息驅(qū)動(dòng)的中間件輕量級(jí)框架,它提供了一種模型和工具,用于在Spring應(yīng)用程序中實(shí)現(xiàn)企業(yè)集成模式,這篇文章主要介紹了Spring Integration 實(shí)現(xiàn)消息驅(qū)動(dòng),需要的朋友可以參考下2024-05-05解決SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper報(bào)錯(cuò)問題
這篇文章主要介紹了解決SpringBoot搭建MyBatisPlus中selectList遇到LambdaQueryWrapper報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Mybatis-Plus實(shí)現(xiàn)SQL攔截器的示例
這篇文章主要介紹了Mybatis-Plus實(shí)現(xiàn)一個(gè)SQL攔截器,通過使用SQL攔截器,開發(fā)人員可以在執(zhí)行SQL語(yǔ)句之前或之后對(duì)其進(jìn)行修改或記錄,從而更好地控制和優(yōu)化數(shù)據(jù)庫(kù)操作,對(duì)Mybatis-Plus?SQL攔截器相關(guān)知識(shí)感興趣的朋友一起看看吧2023-05-05