在上一个项目中,我完成了一个像这样的控制器:
@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是否更干净?
谢谢, 弗朗切斯科