全局异常处理关于参数异常IllegalArgumentException
时间: 2024-08-14 12:07:27 浏览: 52
全局异常处理是指程序在遇到错误时,并不仅仅局限在一个特定的代码块内部,而是有一个统一的方式来捕获、记录和处理所有可能出现的异常情况。`IllegalArgumentException`是一个常见的运行时异常,它通常在传递给方法的参数不符合预期条件或格式时抛出。例如,如果你试图将字符串转换为整数,但传入的是非数字的值,就会抛出`IllegalArgumentException`。
在全局异常处理中,我们可以使用Java的`try-catch-finally`语句来捕获这个异常。例如:
```java
try {
// 可能引发 IllegalArgumentException 的代码
int num = Integer.parseInt("not a number");
} catch (NumberFormatException e) { // 匹配 IllegalArgumentException 类型
System.out.println("输入的不是一个有效的数值.");
// 这里可以进一步处理异常,如记录日志或返回友好的提示信息
}
finally {
// 无论是否发生异常,finally块中的代码都会被执行
// 例如关闭资源或清理工作
}
```
在这个例子中,如果`parseInt`方法的参数不是有效的数字字符串,就会跳转到`catch`块处理异常。
相关问题
springboot 全局异常
在Spring Boot中,我们可以通过@ControllerAdvice注解来实现全局异常处理。该注解通常用于定义一个全局的异常处理器类,用于处理系统中抛出的各种异常。
下面是一个简单的全局异常处理器类的例子:
```
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleException(Exception e) {
return new ResponseEntity<>("系统异常:" + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
```
在这个例子中,我们定义了一个名为GlobalExceptionHandler的类,并在该类上使用@ControllerAdvice注解来指定该类是一个全局异常处理器类。在该类中,我们使用@ExceptionHandler注解来指定处理Exception异常的方法,并在该方法中返回一个ResponseEntity对象,用于描述异常信息和HTTP状态码。
当系统中抛出Exception异常时,会自动跳转到该处理器类中的handleException方法进行处理,并返回一个HTTP 500 Internal Server Error状态码和异常信息。
除了Exception异常外,我们也可以使用@ExceptionHandler注解来处理其他类型的异常,例如NullPointerException、IllegalArgumentException等。例如:
```
@ExceptionHandler(NullPointerException.class)
public ResponseEntity<String> handleNullPointerException(NullPointerException e) {
return new ResponseEntity<>("空指针异常:" + e.getMessage(), HttpStatus.BAD_REQUEST);
}
@ExceptionHandler(IllegalArgumentException.class)
public ResponseEntity<String> handleIllegalArgumentException(IllegalArgumentException e) {
return new ResponseEntity<>("参数异常:" + e.getMessage(), HttpStatus.BAD_REQUEST);
}
```
在这个例子中,我们分别定义了处理NullPointerException和IllegalArgumentException异常的方法,并在这些方法中返回不同的HTTP状态码和异常信息。
总之,Spring Boot提供了非常方便的全局异常处理机制,可以大大简化我们的异常处理代码,并提高系统的可维护性和稳定性。
java全局异常控制怎么自定义返回编码
Java全局异常控制可以通过自定义异常处理器来实现自定义返回编码。具体步骤如下:
1. 自定义异常类,继承自Exception或RuntimeException类。
2. 在异常类中定义自己的返回编码,例如:
```
public class MyException extends RuntimeException {
private String code;
public MyException(String code, String message) {
super(message);
this.code = code;
}
public String getCode() {
return code;
}
}
```
3. 定义全局异常处理器,实现ExceptionHandler接口,并在类上加上@ControllerAdvice注解。
4. 在全局异常处理器中编写异常处理方法,对不同的异常类型进行处理,并根据异常类型抛出自定义的异常,例如:
```
@ControllerAdvice
public class GlobalExceptionHandler implements ExceptionHandler<Exception> {
@Override
public ResponseEntity<Object> handleException(Exception ex) {
if (ex instanceof NullPointerException) {
throw new MyException("001", "空指针异常");
} else if (ex instanceof IllegalArgumentException) {
throw new MyException("002", "参数异常");
} else {
throw new MyException("999", "系统异常");
}
}
@ExceptionHandler(MyException.class)
public ResponseEntity<Object> handleMyException(MyException ex) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ErrorResponse(ex.getCode(), ex.getMessage()));
}
}
```
5. 在自定义异常类中定义返回给客户端的错误信息,例如:
```
public class ErrorResponse {
private String code;
private String message;
public ErrorResponse(String code, String message) {
this.code = code;
this.message = message;
}
public String getCode() {
return code;
}
public String getMessage() {
return message;
}
}
```
6. 客户端在接收到异常响应时,根据返回的错误码进行相应的处理。
阅读全文