如何处理spring控制器参数类型异常

时间:2017-08-01 14:57:04

标签: java spring model-view-controller

我有简单的弹簧控制器。

@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".

有没有办法让我能够处理这个错误并回复用户,就像必须是数字一样。

提前感谢。

3 个答案:

答案 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”:

https://stackoverflow.com/a/16250729/2520689

答案 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;
}
  1. 使用String。

    而不是int

    public String doSomething(@RequestParam String a){ //转换为int;验证和异常处理逻辑将来到这里 return String.valueOf(a); }

  2. 我们这样跟着。我们有一个实用程序类,它将具有所有转换和验证逻辑。每次我们只需要调用各自的方法。 像:

    UtilityClass.isValidInt(a);
    UtilityClass.isValidLong(a);