我正在设计针对api的异常处理和错误响应。 任何人都可以让我知道异常是如何为企业应用程序设计的。 我们可以将Java预定义的异常映射到应用程序异常。如果是这样,我们如何将预定义的Java异常映射到我们的应用程序场景?如果不是,我们如何为企业应用程序设计例外?有什么指导方针吗? 一旦映射了异常,就将其提供给服务层。错误消息(用于api响应)是否应在服务层中框起?如果是,您可以指定任何原因吗?如果不是,您是否可以指定任何其他选项来对任何api进行帧错误响应? 可以建议您的应用程序遵循任何设计技术吗? 预先感谢
答案 0 :(得分:1)
因此,您要做的就是使用@ControllerAdvice或@RestControllerAdvice编写全局异常处理程序,然后编写异常处理程序。您可以将内置的Exception映射到异常处理程序,因此,如果这些异常发生了,则异常处理程序的代码段将得到执行。我们可以提供自定义的错误消息,以便客户端了解发生了什么问题。
下面是我为处理其余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);
}
}