Spring 引导中的异常处理
Exception Handling in Spring boot
我有一个 spring-boot 应用程序,它有以下终点:
@RequestMapping("/my-end-point")
public MyCustomObject handleProduct(
@RequestParam(name = "productId") String productId,
@RequestParam(name = "maxVersions", defaultValue = "1") int maxVersions,
){
// my code
}
这应该处理表单
的请求
/my-end-point?productId=xyz123&maxVersions=4
但是,当我指定 maxVersions=3.5
时,这会抛出 NumberFormatException
(原因很明显)。如何优雅地处理此 NumberFormatException
和 return 错误消息?
您可以在同一控制器或处理 MethodArgumentTypeMismatchException
异常的 ControllerAdvice
中定义 ExceptionHandler
:
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
public void handleTypeMismatch(MethodArgumentTypeMismatchException ex) {
String name = ex.getName();
String type = ex.getRequiredType().getSimpleName();
Object value = ex.getValue();
String message = String.format("'%s' should be a valid '%s' and '%s' isn't",
name, type, value);
System.out.println(message);
// Do the graceful handling
}
如果在控制器方法参数解析期间,Spring 检测到方法参数类型与实际值类型之间的类型不匹配,则会引发 MethodArgumentTypeMismatchException
。有关如何定义 ExceptionHandler
的更多详细信息,您可以参考 documentation.
我有一个 spring-boot 应用程序,它有以下终点:
@RequestMapping("/my-end-point")
public MyCustomObject handleProduct(
@RequestParam(name = "productId") String productId,
@RequestParam(name = "maxVersions", defaultValue = "1") int maxVersions,
){
// my code
}
这应该处理表单
的请求/my-end-point?productId=xyz123&maxVersions=4
但是,当我指定 maxVersions=3.5
时,这会抛出 NumberFormatException
(原因很明显)。如何优雅地处理此 NumberFormatException
和 return 错误消息?
您可以在同一控制器或处理 MethodArgumentTypeMismatchException
异常的 ControllerAdvice
中定义 ExceptionHandler
:
@ExceptionHandler(MethodArgumentTypeMismatchException.class)
public void handleTypeMismatch(MethodArgumentTypeMismatchException ex) {
String name = ex.getName();
String type = ex.getRequiredType().getSimpleName();
Object value = ex.getValue();
String message = String.format("'%s' should be a valid '%s' and '%s' isn't",
name, type, value);
System.out.println(message);
// Do the graceful handling
}
如果在控制器方法参数解析期间,Spring 检测到方法参数类型与实际值类型之间的类型不匹配,则会引发 MethodArgumentTypeMismatchException
。有关如何定义 ExceptionHandler
的更多详细信息,您可以参考 documentation.