当前位置: 首页 > 知识库问答 >
问题:

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

东门理
2023-03-14

我有一个简单的Spring控制器。

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

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

提前感谢。

共有3个答案

周飞
2023-03-14

优雅的解决方案是捕获异常,然后使用“ResponseEntity”如下回答:

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

庞意智
2023-03-14

我有两种方法:1。使用Spring ExceptionHandler

@ExceptionHandler({Exception.class})
public ModelAndView handleException(Exception exception) {
ModelAndView modelAndView = new ModelAndView("Exception");
modelAndView.addObject("exception", exception.getMessage());
return modelAndView;
}

使用字符串代替int。

公共字符串doSomething(@RequestParam String a){//转换为int;验证

我们以这种方式跟进。我们有一个实用程序类,它将包含所有转换和验证逻辑。每次我们只需调用各自的方法。例如:

UtilityClass.isValidInt(a);
UtilityClass.isValidLong(a);
公冶京
2023-03-14

您可以使用ControllerAdave来处理此类异常

@ControllerAdvice
public class RestControllerAdive extends ResponseEntityExceptionHandler 
{
    @ExceptionHandler(value=NumberFormatException.class)
    public ResponseEntity<Object> handleNumberFormatException(NumberFormatException ex)
    {
        return new ResponseEntity({your-error-message}, HttpStatus);
    }
}
 类似资料:
  • 你们能分享一些关于如何在Spring MVC中设计一个处理异常的良好实现的建议吗?以下是我在网上花了一些时间试图找出处理异常的合适或更好的实现后的一些想法。 以下是我正在进行的项目的一些背景: 使用的MVC框架是Spring Boot Web。与其他使用 Spring MVC 的项目类似,我将代码分为几层:控制器、服务和模型。 在控制器中,主要是验证来自视图(前端)层的表单输入并执行一些业务逻辑。

  • 我想要一些关于如何实现以下目标的建议。我不提供代码,因为我的问题是理论上的,但应要求我可以。所以情况是这样的: 我有多个控制器,每个控制器都可以抛出XYException 我有一个@ControllerAdvice类,其中有一个@ExceptionHandler监视XYExceptions。当它发生时,它打印出“xy”。 在一个(且仅有一个)控制器中,当抛出XYException时,我希望执行一些

  • 我看到了带有各种参数的Spring MVC控制器处理程序方法。例如: null 所以, 什么决定参数列表? 为什么Spring controller处理程序方法没有固定签名? Spring如何处理这些变化的参数列表? 是否可以输入任意类型的参数?

  • 我有一个spring-boot应用程序,没有任何控制器类。如何为该应用程序编写异常处理程序。用@ControllerAdvice注释的异常处理程序类不起作用。

  • 我已经为我的spring boot应用程序创建了一个自定义REST控制器异常处理程序。。。 ... 我处理验证、业务(由于违反业务规则而导致的异常)和技术(与数据库相关、无效的请求参数等)异常。 异常类有两个参数:errorCode(唯一枚举)和消息(异常详细信息)。 正如您从示例中看到的,对于所有情况,我都会返回BAD_REQUEST(400)状态,这不是最佳做法。 我想知道基于异常类别处理HT

  • ControllerClassNameHandlerMapping类是HandlerMapping接口的一个实现,它是通过一个约定来解析请求URL及处理该请求的@Controller控制器实例之间的映射关系。 请看下面一个简单的控制器实现。请注意留意该类的 名称: public class **ViewShoppingCartController** implements Controller {