解析SpringBoot自定義參數(shù)校驗注解
1.引入依賴,spring validation是在hibernate-validator上做了一層封裝
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
2.定義參數(shù)校驗注解與處理器
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ù)量超出庫存"; 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進來 @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進來 @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.全局異常處理器,自定義校驗注解校驗失敗會拋出 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)直接校驗具體參數(shù)時會出現(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)直接校驗具體參數(shù)時會出現(xiàn)org.springframework.web.bind @ExceptionHandler(value = MethodArgumentNotValidException.class) public String handleException2(MethodArgumentNotValidException e) { BindingResult exceptions = e.getBindingResult(); // 判斷異常中是否有錯誤信息,如果存在就使用異常中的消息,否則使用默認消息 if (exceptions.hasErrors()) { // 這里默認錯誤消息 return exceptions.getFieldError().getDefaultMessage(); } return "請求參數(shù)錯誤"; } }
到此這篇關(guān)于SpringBoot自定義參數(shù)校驗注解的文章就介紹到這了,更多相關(guān)SpringBoot校驗注解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于使用MyBatis簡化JDBC開發(fā)和解決SQL語句警告的問題
這篇文章主要介紹了關(guān)于使用MyBatis簡化JDBC開發(fā)和解決SQL語句警告的問題,如果idea和數(shù)據(jù)庫沒有建立鏈接,idea不識別表的信息,就會出現(xiàn)SQL語句的警告,需要的朋友可以參考下2023-05-05Java解析調(diào)用webservice服務(wù)的返回XML串詳解
這篇文章主要介紹了Java解析調(diào)用webservice服務(wù)的返回XML串詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07Java獲取HttpServletRequest的三種方法詳解
這篇文章主要介紹了Java獲取HttpServletRequest的三種方法詳解,是一個接口,全限定名稱為Jakarta.Serclet.http.HttpServletRequest2023-11-11
HttpServletRequest接口是Servlet規(guī)范的一員,需要的朋友可以參考下帶你了解如何使用Spring基于ProxyFactoryBean創(chuàng)建AOP代理
這篇文章主要介紹了Spring基于ProxyFactoryBean創(chuàng)建AOP代理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-08-08feign調(diào)用返回object類型轉(zhuǎn)換方式
這篇文章主要介紹了feign調(diào)用返回object類型轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06