【发布时间】:2019-11-17 14:56:24
【问题描述】:
说,这些是以下 POST & PUT 请求
@PostMapping(value = "/")
public ResponseEntity<CustomResponse<EntityExchange>> createEntity(@Valid @RequestBody EntityExchange entityExchange)
@PutMapping(value = "/{id}")
public ResponseEntity<CustomResponse<EntityExchange>> updateEntity(@Valid @RequestBody EntityExchange entityExchange)
上述请求使用相同的 Exchange 对象,但对于验证字段,例如,“自定义字段”在 POST 请求中可以为空,而它应该出现在 PUT 请求中。我可以为 POST 和 PUT 分别创建两个交换,但是有没有更好的方法来重用交换对象但也有字段验证?
请注意,我使用了“Exchange”术语,因为请求和响应都属于同一模型。
【问题讨论】:
-
通常情况下,
PUTs 预计会在/{id}/发生-无论如何,您都应该将实现约束与 API 设计分离... -
@ernest_k 谢谢,最初的问题实际上是一个错误,现在已经编辑了。困扰我的问题是,是否在两个请求上使用相同的对象,如果是,如何对每个请求进行单独的验证?
-
在我看来,您发现使用相同的表示是很自然的……我也会这样做。因为您似乎在方法运行之前进行了验证,所以它有点棘手(您可以在 PUT 验证之前在对象中设置一个 ID 字段,或者您可以在验证之前在对象中设置一个标志来调整验证逻辑)。在这种情况下,我要做的只是使字段 optional 然后在
updateEntity方法中手动验证它(即,如果未设置该字段,则手动返回错误请求) - 你无论如何都必须检查 ID 是否指向现有实体。 -
我也采用了类似的方法,一种称为个案的手动验证方法。但是使用@user3487063 发布的验证组的方法看起来很有希望。也会尝试的:)。
标签: java spring rest validation request