簡體   English   中英

如何處理彈簧控制器參數類型異常

[英]How to handle spring controllers parameter type exceptions

我有簡單的彈簧控制器。

@GetMapping("/test")
@ResponseBody
public String doSomething(@RequestParam int a) {

    return String.valueOf(a);
}

當我在查詢字符串中傳遞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".

有沒有辦法讓我可以處理此錯誤,並像必須是數字一樣回復用戶。

提前致謝。

您可以使用@ControllerAdive處理此類異常。

@ControllerAdvice
public class RestControllerAdive extends ResponseEntityExceptionHandler 
{
    @ExceptionHandler(value=NumberFormatException.class)
    public ResponseEntity<Object> handleNumberFormatException(NumberFormatException ex)
    {
        return new ResponseEntity({your-error-message}, HttpStatus);
    }
}

優雅的解決方案是捕獲異常,然后使用“ ResponseEntity”,如下所示:

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

我有兩種方法:1.使用Spring ExceptionHandler

@ExceptionHandler({Exception.class})
public ModelAndView handleException(Exception exception) {
ModelAndView modelAndView = new ModelAndView("Exception");
modelAndView.addObject("exception", exception.getMessage());
return modelAndView;
}
  1. 代替int,使用String。

    public String doSomething(@RequestParam String a){//轉換為int; 驗證和異常處理邏輯將在這里返回return String.valueOf(a); }

我們以這種方式關注。 我們有一個實用程序類,它將具有所有轉換和驗證邏輯。 每次我們只需要調用各自的方法。 喜歡:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM