java - 具有不同 PathVariable 的相同 rest 端点

标签 java spring rest spring-boot kotlin

我正在尝试创建两个具有相同 uri 但类型不同的 rest 端点。 第一个将按 EAN (Int) 搜索,第二个将按 id (String) 搜索。我可以以某种方式使端点过载吗?我将 Spring Boot 与 Kotlin 结合使用

@GetMapping("/book/{ean}")
fun getABookByEan(@PathVariable ean: Int) : ResponseEntity<*> {
    repository.getByEan(ean)?.let {
        return ResponseEntity.status(HttpStatus.OK).body(it)
    }
    throw ItemNotFoundException()
}

@GetMapping("/book/{id}")
fun getABookById(@PathVariable id: String) : ResponseEntity<*> {
    repository.getById(id)?.let {
        return ResponseEntity.status(HttpStatus.OK).body(it)
    }
    throw ItemNotFoundException()
}

在此之后我得到一个异常,多个方法映射到同一个端点。

...NestedServletException:请求处理失败;嵌套异常是 java.lang.IllegalStateException:为 HTTP 路径映射的模糊处理程序方法...

最佳答案

我发现如果我想坚持使用我的 API,唯一的方法就是正则表达式。

@GetMapping("/book/{ean:[\\d]+}")

@GetMapping("/book/{id:^[0-9a-fA-F]{24}$}")

有了它MongoDB生成的16进制24个字符就可以和简单的数字区分开来了。如果有人找到更好的方法,请在评论中告诉我。

关于java - 具有不同 PathVariable 的相同 rest 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44499988/

相关文章:

Java LongStream求和int数组元素

使用 Jep 集成 Java 和 Python

java - 图像的错误 URL 编码

java - 更新到 BouncycaSTLe 版本 1.56 后出现证书问题

Spring 3.2 和缓存抽象缺少 EhCache 实现

spring - 如何在 application.properties 中拆分属性的值

java - 即使 JPA 实体不脏,我也可以强制 spring-data 更新可审计字段吗?

rest - 哪个状态代码是正确的 404 或 400 以及何时使用它们中的任何一个?

java - 如何使用 SoapUI 测试需要多选复选框的 REST 服务?

java - JAX-RS 自动将 List<Object> 编码为 JSON