最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC @ExceptionHandler典型用法及說明

 更新時間:2026年04月16日 14:38:28   作者:張紫娃  
文章介紹了Spring中的異常處理機制,包括處理單個和多個異常類型的方法,返回結(jié)構(gòu)化錯誤信息的推薦做法,以及處理所有異常的兜底方法,另外,還提到了@ExceptionHandler方法的多種返回類型

處理單個異常類型

當(dāng) getUser() 方法拋出 UserNotFoundException 時,會自動調(diào)用 handleUserNotFound() 方法進行處理。

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        // 可能拋出 UserNotFoundException
        return userService.getUserById(id);
    }

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<String> handleUserNotFound(UserNotFoundException ex) {
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ex.getMessage());
    }
}

處理多個異常類型

一個 @ExceptionHandler 方法可以處理多個異常類型:

@ExceptionHandler({IllegalArgumentException.class, ResourceNotFoundException.class})
public ResponseEntity<String> handleClientErrors(RuntimeException ex) {
    return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("客戶端錯誤: " + ex.getMessage());
}

結(jié)合 @ResponseStatus 使用(返回指定狀態(tài)碼)

此時返回值直接作為響應(yīng)體,HTTP 狀態(tài)碼由 @ResponseStatus 指定。

@ExceptionHandler(ResourceNotFoundException.class)
@ResponseStatus(HttpStatus.NOT_FOUND)
public String handleResourceNotFound(ResourceNotFoundException ex) {
    return ex.getMessage();
}

返回結(jié)構(gòu)化錯誤信息(推薦做法)

@ExceptionHandler(UserNotFoundException.class)
public ResponseEntity<ErrorResponse> handleUserNotFound(UserNotFoundException ex) {
    ErrorResponse error = new ErrorResponse(HttpStatus.NOT_FOUND.value(), ex.getMessage(), LocalDateTime.now());
    return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);
}

// ErrorResponse 示例類
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ErrorResponse {
    private int status;
    private String message;
    private LocalDateTime timestamp;
}

捕獲所有異常(兜底處理)

注意順序:

更具體的異常應(yīng)放在前面,避免被 Exception.class 攔截。

@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public ErrorResponse handleAllExceptions(Exception ex) {
    return new ErrorResponse(HttpStatus.INTERNAL_SERVER_ERROR.value(), "系統(tǒng)內(nèi)部錯誤", ex.getMessage(), LocalDateTime.now());
}

不同返回類型

@ExceptionHandler 方法可以有多種返回類型,如 String, ResponseEntity, Map, 自定義 DTO 等。

@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("用戶 ID 不合法");
        }
        // ...
    }

    @ExceptionHandler(IllegalArgumentException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public String handleIllegalArgument(IllegalArgumentException ex) {
        return "參數(shù)錯誤:" + ex.getMessage();
    }

    @ExceptionHandler(UserNotFoundException.class)
    public ResponseEntity<ErrorResponse> handleUserNotFound(UserNotFoundException ex) {
        ErrorResponse error = new ErrorResponse(404, ex.getMessage(), LocalDateTime.now());
        return ResponseEntity.status(HttpStatus.NOT_FOUND).body(error);
    }

    @ExceptionHandler(Exception.class)
    @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
    public ErrorResponse handleAllExceptions(Exception ex) {
        return new ErrorResponse(500, "系統(tǒng)錯誤", ex.getMessage(), LocalDateTime.now());
    }
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

葫芦岛市| 金秀| 涡阳县| 沈阳市| 南康市| 蓝田县| 庆元县| 荥经县| 大渡口区| 柞水县| 辽宁省| 南部县| 葵青区| 贞丰县| 吉隆县| 建始县| 恩施市| 嫩江县| 南投市| 阿勒泰市| 调兵山市| 新晃| 万宁市| 五大连池市| 张家港市| 肥东县| 安泽县| 同心县| 新建县| 酒泉市| 德安县| 营山县| 中超| 长葛市| 临夏市| 珠海市| 嘉义市| 常熟市| 宁乡县| 刚察县| 额尔古纳市|