我有简单的弹簧控制器。
@GetMapping("/test")
@ResponseBody
public String doSomething(@RequestParam int a) {
return String.valueOf(a);
}
当我在查询字符串中传递= 1时,它可以正常工作。
但是当我通过a = abc时,它给了我这个。
> Failed to convert value of type 'java.lang.String' to required type
> 'int'; nested exception is java.lang.NumberFormatException: For input
> string: "abc".
有没有办法让我能够处理这个错误并回复用户,就像必须是数字一样。
提前感谢。
答案 0 :(得分:0)
您可以使用@ControllerAdive
来处理此类例外。
@ControllerAdvice
public class RestControllerAdive extends ResponseEntityExceptionHandler
{
@ExceptionHandler(value=NumberFormatException.class)
public ResponseEntity<Object> handleNumberFormatException(NumberFormatException ex)
{
return new ResponseEntity({your-error-message}, HttpStatus);
}
}
答案 1 :(得分:0)
优雅的解决方案是捕获异常,然后使用像这个答案的“ResponseEntity”:
答案 2 :(得分:0)
我有两种方法: 1.使用Spring ExceptionHandler
@ExceptionHandler({Exception.class})
public ModelAndView handleException(Exception exception) {
ModelAndView modelAndView = new ModelAndView("Exception");
modelAndView.addObject("exception", exception.getMessage());
return modelAndView;
}
使用String。
而不是intpublic String doSomething(@RequestParam String a){ //转换为int;验证和异常处理逻辑将来到这里 return String.valueOf(a); }
我们这样跟着。我们有一个实用程序类,它将具有所有转换和验证逻辑。每次我们只需要调用各自的方法。 像:
UtilityClass.isValidInt(a);
UtilityClass.isValidLong(a);