我正在设计针对api的异常处理和错误响应。任何人都可以让我知道异常是如何为企业应用程序设计的。我们可以将Java预定义的异常映射到应用程序异常。如果是这样,我们如何将预定义的Java异常映射到我们的应用程序场景?如果不是,我们如何为企业应用程序设计例外?有什么指导方针吗?一旦映射了异常,就将其提供给服务层。错误消息(用于api响应)是否应该在服务层中框起来?如果是,您可以指定任何原因吗?如果不是,您是否可以指定任何其他用于对任何api进行错误响应框架的选项?可以建议您的应用程序遵循任何设计技术吗?在此先感谢
以下是我为处理其他api异常而开发的代码段。因此,在我的代码中,我处理了两个异常NoSuchElementException和MethodArgumentNotValid异常。
例如我如果您按ID搜索记录,并且该记录不存在,则将获取NoSuchElementException,以便客户端将知道该ID不存在记录]
并且对于MethodArgumentNotValid异常,我已向变量添加了约束例如,尝试输入否定ID会出现此异常
@ ControllerAdvice
公共类GlobalExceptionHandler扩展了ResponseEntityExceptionHandler {
@ExceptionHandler(NoSuchElementException.class)
public final ResponseEntity<Object>handleRecordNotFoundException(NoSuchElementException ex,WebRequest request)
{
return handleExceptionInternal(ex,ErrorResponse.builder()
.status(HttpStatus.NOT_FOUND)
.timestamp(new Date())
.detail(ex.getLocalizedMessage())
.message("Record not found")
.build(),new HttpHeaders(),HttpStatus.NOT_FOUND,request);
}
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(MethodArgumentNotValidException ex,HttpHeaders headers,HttpStatus status,WebRequest request)
{
List<String> errors=new ArrayList<String>();
for(ObjectError error:ex.getBindingResult().getFieldErrors())
{
errors.add(error.getObjectName()+":"error.getDefaultMessage());
}
return handleExceptionInternal(ex,ErrorResponse.builder().details(errors).build,headers,HttpStatus.BAD_REQUEST,request);
}
}