【发布时间】:2017-07-23 23:42:45
【问题描述】:
我的控制器中有一个端点配置如下:
@RequestMapping(value = "/users/{userId}/data", method = RequestMethod.GET)
public void getUserData(@PathVariable("userId") @Valid @NotNull Integer userId, HttpServletRequest request) {
}
如果客户端使用空白userId 向此端点发送请求,我假设 Spring 将 URL 解释为 /users//data,因为引发了此异常:
2017-03-03 11:13:41,259 [[ACTIVE] ExecuteThread: '3' 用于队列: 'weblogic.kernel.Default (self-tuning)'] 错误类 com.xxxx.web.controller.custom.ExceptionHandlingController: 抛出运行时异常: org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: 无法将“java.lang.String”类型的值转换为所需类型 'java.lang.Integer';嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“数据”
处理此用例的最佳方法是什么?我对将userId 转换为字符串并捕获异常持谨慎态度,这似乎是一种黑客行为。我也不想依赖客户端总是发送正确的请求。我目前正在使用 Spring-Boot v1.2.6.RELEASE,如果我知道可以修复它,我愿意升级版本。
【问题讨论】:
标签: java spring web-services spring-boot request-mapping