spring - 最好返回通用响应实体类型来处理错误或抛出异常
问题描述
发生错误时返回通用响应实体ResponseEntity<*>
或抛出异常更好吗?
考虑以下 kotlin 代码:
@PostMapping("/customer")
fun handleRequest(@Valid @RequestBody customer: Customer, result: BindingResult): ResponseEntity<CustomerResponse> {
if(result.hasErrors()) {
// #### Use generic response entity for return type
// #### Or throw error to be picked up in controller advice ?
}
val isValid = recapcthaService.validate(...)
if(!isValid){
// #### Use generic response entity for return type
// #### Or throw error to be picked up in controller advice ?
}
}
请求处理函数返回ResponseEntity<CustomerResponse>
但是在错误状态的情况下,如验证错误或 recapctha 验证失败,我想返回一个不同的返回 a ResponseEntity<ErrorResponse>
,因为这ErrorResponse
是错误/异常的常见响应类型。
在这种情况下,最好将返回类型更改为ResponseEntity<*>
或抛出异常以被控制器建议拾取?
解决方案
这更像是一个建议。显然,这两种方法都可以正常工作。我会包装ErrorResponse
在一个 customValidationeException
中。这样,您可以从任何有错误响应的地方抛出此异常。也将使用自定义@ControllerAdvice
来处理ValidationException
并将其映射到ResponseEntity
. 这对于您想要映射的任何其他自定义异常很有用。例如,您还可以将绑定结果从MethodArgumentNotValidException
.
就像是
@ControllerAdvice
public class CustomExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headera, HttpStatus status, WebREquest request) {return ResponseEntity...};
@ExceptionHandler(ValidationException.class) }
protected ResponseEntity<ErrorResponse> handleValidationErrors(ValidationExceptionex) {return ResponseEntity...};
}
有关进一步的解释,您可以在这里查看https://www.baeldung.com/global-error-handler-in-a-spring-rest-api
推荐阅读
- c++ - 通过按索引选择范围的元素来创建视图
- amazon-web-services - AWS CodePipeline BuildAction 未检测到 buildspec.yml 辅助工件
- sql - 同一列中名称第一个字符相同的对
- python - 我在python中遇到了一些值错误问题
- python - 从相关类或它自己的类创建对象?
- python - Geopy 返回 HTTP 错误 400:错误请求
- java - 编写一个程序,如果给定一个字符数组,将输出具有从最大到最小的顺序索引的数组(java)
- batch-file - 在流放者柯南 DefaultGame.ini 中删除起始视频的批处理文件
- python - 如何通过 PCA 降维找到最相关的变量?
- go - 对 GoQuery 感到困惑