我正在开发一个Spring REST应用程序
此应用程序只有REST控制器,没有视图部分。
我想知道如何验证@RequestParam
例如
@RequestMapping(value = "", params = "from", method = RequestMethod.GET)
public List<MealReadingDTO> getAllMealReadingsAfter(@RequestParam(name = "from", required = true) Date fromDate) {
......
......
}
在上面的示例中,我的目标是验证Date
。假设有人传递了无效值,那么我应该能够处理这种情况
现在它以500
状态给予和例外。
的 PS
我的问题不仅仅是Date
验证
假设有一个boolean
参数,有人错误地通过了tru
而不是true
,我也应该能够处理这种情况。
在此先感谢:)
答案 0 :(得分:3)
Spring将失败并显示500
状态代码,因为它无法解析该值。
请求处理的阶段是:
@Validated
则验证值在您的情况下,流程在解析(3)阶段失败。
很可能您会收到BindException
。
您可以通过为控制器提供异常处理程序来处理这些情况。
@ControllerAdvice
public class ControllerExceptionHandler {
@ExceptionHandler(BindException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ResponseBody
public YourErrorObject handleBindException(BindException e) {
// the details which field binding went wrong are in the
// exception object.
return yourCustomErrorData;
}
}
否则,当解析没有按预期运行时(尤其是Date
s的麻烦),您可能想要添加自定义映射器/序列化器。
最有可能你必须配置Jackson,因为该软件包负责序列化/反序列化值。