【问题标题】:Spring - checking path variable for null at controllerSpring - 在控制器上检查路径变量是否为空
【发布时间】:2020-07-19 23:06:49
【问题描述】:

我在控制器获取请求中定义了一个路径变量:

@PathVariable("ticketId") final Long ticketId

如何检查这个值不为空?

使用读取https://www.baeldung.com/spring-validate-requestparam-pathvariable@NotBlank,但未提及检查null。

使用:

if ticketId == Null {
//return message indicating to user that null has been passed to path
}

似乎是一种不好的做法,应该改用try/catch 吗?

【问题讨论】:

  • 您可以使用@NotNull 进行空检查
  • If(StringUtils.isNotEmpty(ticketId)) 应该足够了

标签: java spring spring-boot rest model-view-controller


【解决方案1】:

您可以使用注释@NotNull 来验证传递的参数不是null。但是,它只适用于像Long 这样的对象类型。如果您使用原始数据类型long,则无法使用注释。

@PathVariable("ticketId") @NotNull final Long ticketId

我宁愿推荐使用long,根据定义它不能是null

或者,如果有更高级的验证传入参数的逻辑,您可以抛出ResponseStatusException。这种方法的优点是 HTTP 状态被传播到最终响应。以下示例结果为400 Bad Request

if (ticketId == null) {
    throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "ticketId cannot be null");
}

【讨论】:

  • 我宁愿推荐使用 long 根据定义不能为空。 +1
【解决方案2】:

对 String 数据类型使用 @NotBlank,对其他 Wrapper 类型使用 @NotNull,但对于 Primitve 类型,它不起作用,因为它们不会返回 null,因为它们具有默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 2018-07-03
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多