入參中的異常處理

這個有點特殊。 方法內的異常,手動打日誌很容易。
入參發生異常,接口肯定是返回信息的。 但是之後排查很有困難,因爲根本沒有記錄日誌。

解決方案

使用異常攔截器 @ExceptionHandler和@ControllerAdvice,這裏不敘述使用方法。

400異常模擬

@RequestParam(required = true)設置入參必填

@RequestParam(required = true) 設置入參username爲必填,爲空報錯:

@RequestMapping("/queryString")
@ResponseBody
public void queryString(@RequestParam(required = true) String username){
    System.out.println(username);
}

@RequestBody @Valid 設置入參校驗

 @RequestMapping("/query")
 @ResponseBody
 public void query(@RequestBody @Valid User user){
     System.out.println("query");
 }

爲什麼2個註解都需要

@RequestBody的required默認爲true,所以@RequestBody 和 @RequestBody(required=true) 一樣。

那麼爲什麼只設置@RequestBody(required=true) 即使入參爲空也不報錯?
是這樣的, 如果入參爲空,那麼仍然創建了一個User對象,只不過屬性都是空字符串。

所以需要加上@Valid,檢驗User類的屬性。

User類代碼

@Data
public class User {
    @NotBlank(message = "姓名不能爲空")
    private String username;
    private String password;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章