解析SpringBoot自定義參數(shù)校驗(yàn)注解
1.引入依賴(lài),spring validation是在hibernate-validator上做了一層封裝
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2.定義參數(shù)校驗(yàn)注解與處理器
import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.*; @Documented @Retention(value = RetentionPolicy.RUNTIME) @Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER}) @Constraint(validatedBy = OrderCountValidator.class) public @interface OrderCountValid { String message() default "訂單數(shù)量超出庫(kù)存"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; }
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class OrderCountValidator implements ConstraintValidator<OrderCountValid , Integer> { //可以注入mapper、service進(jìn)來(lái) @Autowired private OrderService orderService; @Override public boolean isValid(Integer buyCount, ConstraintValidatorContext context) { return orderService.OrderCountValid(buyCount); } }
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; public class OrderCountValidator implements ConstraintValidator<OrderCountValid , Integer> { //可以注入mapper、service進(jìn)來(lái) @Autowired private OrderService orderService; @Override public boolean isValid(Integer buyCount, ConstraintValidatorContext context) { return orderService.OrderCountValid(buyCount); } }
3.控制器層
@RestController @RequestMapping(value = "/order") public class OrderController { @PostMapping("/placeOrder") public String placeOrder(@RequestBody @Valid Order order){ return "success"; } }
4.全局異常處理器,自定義校驗(yàn)注解校驗(yàn)失敗會(huì)拋出 javax.validation.ConstraintViolationException
import org.springframework.stereotype.Component; import org.springframework.validation.BindingResult; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; import java.util.stream.Collectors; @RestControllerAdvice @Component public class GlobalExceptionHandler { // 當(dāng)直接校驗(yàn)具體參數(shù)時(shí)會(huì)出現(xiàn)javax.validation.ConstraintViolationException @ExceptionHandler(value = ConstraintViolationException.class) public String handleException1(ConstraintViolationException e) { // 拼接參數(shù) String errorMsg = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(", ")); return errorMsg; } // 當(dāng)直接校驗(yàn)具體參數(shù)時(shí)會(huì)出現(xiàn)org.springframework.web.bind @ExceptionHandler(value = MethodArgumentNotValidException.class) public String handleException2(MethodArgumentNotValidException e) { BindingResult exceptions = e.getBindingResult(); // 判斷異常中是否有錯(cuò)誤信息,如果存在就使用異常中的消息,否則使用默認(rèn)消息 if (exceptions.hasErrors()) { // 這里默認(rèn)錯(cuò)誤消息 return exceptions.getFieldError().getDefaultMessage(); } return "請(qǐng)求參數(shù)錯(cuò)誤"; } }
到此這篇關(guān)于SpringBoot自定義參數(shù)校驗(yàn)注解的文章就介紹到這了,更多相關(guān)SpringBoot校驗(yàn)注解內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于使用MyBatis簡(jiǎn)化JDBC開(kāi)發(fā)和解決SQL語(yǔ)句警告的問(wèn)題
這篇文章主要介紹了關(guān)于使用MyBatis簡(jiǎn)化JDBC開(kāi)發(fā)和解決SQL語(yǔ)句警告的問(wèn)題,如果idea和數(shù)據(jù)庫(kù)沒(méi)有建立鏈接,idea不識(shí)別表的信息,就會(huì)出現(xiàn)SQL語(yǔ)句的警告,需要的朋友可以參考下2023-05-05MybatisX-Generator自動(dòng)代碼生成插件教程
這篇文章主要介紹了MybatisX-Generator自動(dòng)代碼生成插件教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Java解析調(diào)用webservice服務(wù)的返回XML串詳解
這篇文章主要介紹了Java解析調(diào)用webservice服務(wù)的返回XML串詳解的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07springboot Mongodb的集成與使用實(shí)例詳解
這篇文章主要介紹了springboot Mongodb的集成與使用實(shí)例詳解,需要的朋友可以參考下2018-04-04Java獲取HttpServletRequest的三種方法詳解
這篇文章主要介紹了Java獲取HttpServletRequest的三種方法詳解,是一個(gè)接口,全限定名稱(chēng)為Jakarta.Serclet.http.HttpServletRequest2023-11-11
HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2021-08-08feign調(diào)用返回object類(lèi)型轉(zhuǎn)換方式
這篇文章主要介紹了feign調(diào)用返回object類(lèi)型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06