繁体   English   中英

如何在Spring REST控制器中验证请求参数

[英]How to validate request parameters in Spring REST controller

我正在开发Spring REST应用程序。
此应用程序只有REST控制器,没有视图部分。

我想知道如何验证@RequestParam

例如

@RequestMapping(value = "", params = "from", method = RequestMethod.GET)
    public List<MealReadingDTO> getAllMealReadingsAfter(@RequestParam(name = "from", required = true) Date fromDate) {
......
......
}

在上面的示例中,我的目标是验证Date 假设有人传递了一个无效的值,那么我应该能够处理这种情况。
现在,它的给予与例外状态为500

聚苯乙烯
我的问题不只是关于Date验证。
假设有一个boolean参数,并且有人错误地将tru传递给true而不是true ,那么我也应该能够处理这种情况。

提前致谢 :)

Spring将失败,并显示500状态代码,因为它无法解析该值。

请求处理的阶段为:

  1. 收到请求
  2. 识别终点
  3. 解析请求参数/主体值,并将其绑定到检测到的对象
  4. 如果使用@Validated则验证值
  5. 使用适当的参数输入方法调用

在您的情况下,流在parse(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的麻烦),您可能要添加自定义映射器/序列化器。

很可能您必须配置Jackson,因为该软件包负责序列化/反序列化值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM