ControllerAdvice
指示帶注釋的類輔助“控制器”。
作為的特殊化@Component
,允許通過類路徑掃描自動檢測實現類。
通常用於定義@ExceptionHandler
, @InitBinder
和@ModelAttribute
適用於所有@RequestMapping
方法的方法。
之一的annotations()
,basePackageClasses()
, basePackages()
或它的別名value()
可以被指定,以限定控制器,以協助的特定子集。當應用多個選擇器時,將應用“或”邏輯-表示選定的控制器應至少匹配一個選擇器。
默認行為(即,如果不使用任何選擇器使用),帶@ControllerAdvice
注釋的類將幫助所有已知的Controller。
請注意,這些檢查是在運行時完成的,因此添加許多屬性並使用多種策略可能會帶來負面影響(復雜性,性能)。
/**
* SpringMVC統一異常處理
* 注:@ControllerAdvice為Controller層增強器,其只能處理Controller層拋出的異常;
* 由於代碼間的層級調用機制 、異常的處理機制等,所以這里處理Controller層的異常,就相當於
* 處理了全局異常
* @author
*/
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public Object bindException(MethodArgumentNotValidException e) {
BindingResult bindingResult = e.getBindingResult();
StringBuilder sb=new StringBuilder();
sb.append("基礎數據校驗不通過:");
for (FieldError fieldError : bindingResult.getFieldErrors()) {
sb.append("\n");
sb.append(fieldError.getDefaultMessage());
}
Map<String,Object> result=new HashMap<>();
result.put("code","00000010");
result.put("data",sb.toString());
return result;
}
}
@Length(min = 12,message = "訂單號長度不正確")
@NotBlank(message = "訂單號不能為空")
String orderId;