【问题标题】:How to validate @PathVariable is set?如何验证 @PathVariable 是否已设置?
【发布时间】:2020-09-04 06:13:33
【问题描述】:

这是我的Get 请求:

@GetMapping("/stats/{fromDate}/{toDate}")
public StatsSummary getStatsSummary(@PathVariable String fromDate, @PathVariable String toDate) {

    logger.info("Calculating statistics between" + fromDate + ",to" + toDate);

    return statsService.getStatsSummary(fromDate, toDate);

}

我已尝试将注释 @NotBlank 添加为:

public StatsSummary getStatsSummary(@PathVariable String fromDate, @PathVariable @NotBlank String toDate) {

但是当我调用不包括toDate 的/stats/2020-05-30/ 时,我收到了响应:

{
    "timestamp": "2020-09-04T06:02:46.567+00:00",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/stats/2020-05-30/"
}

所以注解没有正确注册?

更新:

似乎 PathVariable 不应该被验证:

The validators (@Validated @Valid) do not work with Spring and TomEE

【问题讨论】:

  • 我也遇到了同样的问题,我在下面添加了答案,如果这解决了您的问题,请接受。

标签: java spring spring-boot rest validation


【解决方案1】:

在 REST 中,路径变量是资源 URL 的一部分。因此,如果缺少部分路径/URL,则资源不同。

这就是为什么 404 是正确的响应代码。

如果这两个变量可以为空,它们应该是@RequestParam。

【讨论】:

    【解决方案2】:

    实际上 Spring 通过发送 404 向客户端返回正确答案。 当有人没有提供完整的 URL 时,404 是响应状态。

    验证的正确方法是使用诸如 Date 或 LocalDate 或类似的日期类来代替 String。 可能您需要定义正确的日期格式,因此请查看以下链接了解详细信息。 https://www.baeldung.com/spring-date-parameters

    【讨论】:

      【解决方案3】:

      将以下注释添加到为我工作的类中。(不是方法)

      @Validated
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 2016-05-11
        • 2014-09-15
        • 1970-01-01
        相关资源
        最近更新 更多