如何解决Spring Boot我如何在Rest Controller中忽略请求正文中的某些字段
假设我在rest控制器类中有signUp方法,如下所示。
f
因此它需要请求主体,即RegisterUserCommand。
@PostMapping("/signup")
fun authenticateSignUp(@RequestBody command: RegisterUserCommand): CompletableFuture<String> {
return commandGateway.send<String>(command)
}
我想忽略诸如userId和balance之类的字段,以便以后可以在控制器内部像这样生成它
data class RegisterUserCommand(
val userId: String,val balance: BigDecimal,val username: String,private val email: String,private val password: String
)
是否有任何注释可以忽略此字段,因此即使我没有在请求正文中放置userId和balance,它也不会返回错误的请求
解决方法
@flaxel正确指出,您可以使用Kotlin的?
,我相信也可以添加@JvmOverloads constructor
。
但是,我认为使用DTO
是肯定可以解决此问题的最佳方法。
Controller
的输入不应是Command
,而应是包含您感兴趣的字段的DTO
。使用增强的值构建命令的方式应不受此影响。 / p>
在这种情况下,您会遇到类似的情况(还添加了@TargetAggregateIdentifier
,因为您可能错过了它):
data class RegisterUserCommand(
@TargetAggregateIdentifier
val userId: String,val balance: BigDecimal,val username: String,private val email: String,private val password: String
)
...
data class RegisterUserDto(
val username: String,private val password: String
)
...
@PostMapping("/signup")
fun authenticateSignUp(@RequestBody request: RegisterUserDto): CompletableFuture<String> {
val command = new RegisterUserCommand // build the command the way you want it
return commandGateway.send<String>(command)
}
,
我想您可以使用?
运算符将变量标记为可为空。但我建议使用DTOs。
data class RegisterUserDto(
val username: String,private val password: String
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。