java - Spring Boot在验证@PathVariable参数时如何返回自定义错误消息
问题描述
是否可以向路径变量添加一些自定义验证消息?
我有一些 GET
@GetMapping("/v2/tw/{id}")
public TwDto getTw(Authentication auth, @PathVariable Long id) {
如果/v2/tw/someString
我想捕获错误并添加一些自定义错误消息,例如“无效的 tw ID”... 怎么做?在ControllerAdvice
添加一些ExceptionHandler
?
解决方案
对于您的特定用例,您可以@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 并处理不同的情况。
推荐阅读
- angular - 路由守卫不适用于 2 observable
- c# - 如何使用 Combobox SelectedValue 使 TextBox 可见性?
- c++ - 两个 glm::mat4 矩阵的点到点 XYZ 距离
- c# - 仅在某些计算机上开始使用 SQLite-net-pcl 后 Windows 窗体应用程序崩溃
- php - 我怎样才能使它适用于所有子域?
- android - 将支持迁移到 Android X:跨模块的版本是否一致?
- neo4j - 在创建大量关系时,neo4j 一直说服务器已断开连接
- c# - HttpClient 连接状态在使用一段时间后保持在 TIME_WAIT 导致 Socket Exception
- javascript - 用于匹配正整数和负整数的 Javascript RegEx
- java - 使用基本身份验证在 GET 请求期间进行身份验证