rest - 带有正文的 GET 请求
问题描述
在我的上一个项目中,我做了一个像这样的控制器:
@GetMapping("/search")
fun findByUserContact(@RequestBody @Valid userContactDto: UserContactDto) =
userService.findByUserContact(userContactDto)
一个UserContactDto
是:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes(
JsonSubTypes.Type(value = Email::class, name = "email"),
JsonSubTypes.Type(value = Cellphone::class, name = "cellphone"),
JsonSubTypes.Type(value = Both::class, name = "both")
)
sealed class UserContactDto
data class Email(@field:javax.validation.constraints.Email val email: String) : UserContactDto()
data class Cellphone(@field:PhoneNumber val cellphone: String) : UserContactDto()
data class Both(
@field:javax.validation.constraints.Email val email: String,
@field:PhoneNumber val cellphone: String
) : UserContactDto()
我以这种方式设计了 API,因为我不知道搜索是否会通过以下方式完成:
- 仅电子邮件
- 仅限手机
- 电子邮件和手机
但我认为这对于 REST API 来说不是一个好的设计……带有正文的 GET 请求。什么是解决我的用例的好方法?
自定义序列化程序查询参数->UserContact
可以是有效的方法吗?
为 3 种不同的情况创建不同的 API 会更干净吗?
谢谢,弗朗西斯科
解决方案
推荐阅读
- vue.js - 如何在 Nuxt 中使用 Markdownit 模块
- python-3.x - 如何更改每个测试的 pytest-html 报告中显示的路径
- antlr - 如何在 ANTLR 语法中使用表达式否定
- excel - 我如何知道我的工作表是否也打开到另一个工作簿
- javascript - jquery 包含的选择器不适用于特定的 innerHTML
- python - 在 python 中使用 ivi 驱动程序时,无法“导入 pyivi”
- clob - 从 db 获取大于 32k 的 clob 到 apex 富文本编辑器的代码
- swift - 我需要将数组中的数据排序到 UITableView 部分,其中日期为部分标题,任何日期为今天的日期为“今天”等
- amazon-web-services - Strapi 可以启动到 AWS lambda 中吗?
- java - 解析和读取/写入自定义文件