java - 休息端点异常处理
问题描述
下面是我的休息端点。我使用 Long 作为userId的数据类型,当通过如下邮递员调用端点时它工作正常,并且我能够显式处理异常。
本地主机:8080/order-service/save-order/1
但是当我用字符串类型参数这样调用时,
本地主机:8080/order-service/save-order/abc
spring boot 隐式处理异常并给出 400 bad request。
我想要的是当参数的变量类型不等于long时抛出一个自定义错误消息,如“请发送正确的userId”。
@PostMapping(path = "/save-order/{userId}")
@ResponseBody
public ResponseEntity<ExceptionResponse> addOrder(@Valid @RequestBody
OrderDTO orderDto, @Valid @PathVariable(name = "userId") Long userId) throws BatchException, UserExceptions, BatchIdException, InvalidDateFormatException, DeliveryIdException,BatchMerchantException {
return ResponseEntity.ok(new ExceptionResponse("Order Saved", 201, orderServiceImpl.saveOrder(orderDto, userId)));
}
解决方案
您可以实现自己的自定义验证器,请参见此处:https ://www.baeldung.com/spring-mvc-custom-validator
如果输入适合则返回 true,否则返回 false,您还可以在此处定义要在用户输入错误输入时向用户显示的消息。
推荐阅读
- performance - 如何仅渲染 ScrollPane 内的可见节点?
- mysql - HikariCP - MYSQL 连接关闭后不允许操作。可能考虑使用更短的 maxLifetime 值
- sql-server - 使用标识列复制/克隆 SQL Server 中的分层数据
- c# - 使用 C# 从 SharePoint (CSOM) 下载特定文件
- java - 为什么 matcher.find() 没有给出任何结果?为什么会结冰?
- c++ - 从函数返回时的SIGABRT?
- ios - CALayer 中的 CGImage 出现倒置
- html - 从自己的网站共享链接到 Linkedin 应用程序 (iOS)
- postgresql - postgres 授予功能问题
- dictionary - Amchart:改变 MapChart 错误的颜色