包装器类型路径变量不接受空值 - Spring 启动

Wrapper type Path variable won't accept null value - Spring Boot

这是我们的控制器

@GetMapping(path = "/getUsersForHierarchy/{entity}/{hierId}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<UserInfo>> getUsersForHierarchy(@PathVariable(name = "entity", required = true) int entity,
            @PathVariable(name = "hierId", required = true) Integer hierId) {

    ..................

    ..................

}

我们期待两个 Path variables,一个是 int 类型(实体),另一个是 Integer 类型(hierId)。 hierId 可以为 null 或任何数值,这就是它保持为 Wrapper 的原因。但是它在发出这样的请求时出错

http://localhost:5010/v1/accountholder/userinfo/getUsersForHierarchy/5/null

现在 Wrapper 应该接受 null 值,但我们遇到了这样的错误

无法将类型 'java.lang.String' 的值转换为所需类型 'java.lang.Integer';嵌套异常是 java.lang.NumberFormatException:对于输入字符串:“null”

如果我们将 Integer 更改为 String,调用将进入控制器内部,但为了进一步的处理,我们需要使用 Integer。

我们调查了这个 ,并尝试调用 API 改变 URL 像这样

http://localhost:5010/v1/accountholder/userinfo/getUsersForHierarchy/5/blaaa/null,但是还是报错

应该怎么办?

如果您希望它可以为空,您可以通过以下方式实现。首先,如果它可以为空,则所需的 属性 应该是 false。此外,考虑到 required = true 是默认值,因此无需指定它,如果路径变量的名称与相应变量的名称匹配,则您也不必指定名称。

@GetMapping(value = {
        "/getUsersForHierarchy/{entity}/", 
        "/getUsersForHierarchy/{entity}/{hierId}"
    },
    produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<UserInfo>> getUsersForHierarchy(
    @PathVariable int entity,
    @PathVariable(required = false) Integer hierId) {

}

考虑到我不喜欢故意允许空值进入应用程序,另一个好处可能是 Optional 类型需要 hierId,因此以下内容将为您提供Optional.empty 当仅调用 /getUsersForHierarchy/123/hierId 为空时。否则它将在提供 hierId 调用 /getUsersForHierarchy/123/321:

时填充可选
@GetMapping(value = {
        "/getUsersForHierarchy/{entity}/", 
        "/getUsersForHierarchy/{entity}/{hierId}"
    },
    produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<List<UserInfo>> getUsersForHierarchy(
    @PathVariable int entity,
    @PathVariable Optional<Integer> hierId) {

}