首页 > 解决方案 > Spring Boot在验证@PathVariable参数时如何返回自定义错误消息

问题描述

是否可以向路径变量添加一些自定义验证消息?

我有一些 GET

  @GetMapping("/v2/tw/{id}")
    public TwDto getTw(Authentication auth, @PathVariable Long id) {

如果/v2/tw/someString我想捕获错误并添加一些自定义错误消息,例如“无效的 tw ID”... 怎么做?在ControllerAdvice添加一些ExceptionHandler

标签: javaspring-bootvalidation

解决方案


对于您的特定用例,您可以@ExceptionHandler在控制器或@ControllerAdvice类中使用,如此处所示。例如,我为此返回 NOT_FOUND 错误。

@ExceptionHandler({MethodArgumentTypeMismatchException.class})
@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = "this is the reason")
public void handle() {
}

在您启用之前,您可能不会reason在实际的错误响应中看到

server:
  error:
    include-message: always

如果您认为您@ExceptionHandler只需要在 Controller 类中,您可以将方法保留在控制器中。或者,您可以创建一个@ControllerAdvice类并将方法放在那里,以便您可以在应用程序中的多个控制器之间重用。


但是,如果您想要更复杂的验证,我建议将id类型保留为 String,然后手动转换为 Long 并执行验证。这样做您可以抛出自己的 RuntimeException 并处理不同的情况。


推荐阅读