gpt4 book ai didi

java - 对 api 的异常处理和错误响应

转载 作者:行者123 更新时间:2023-12-02 08:48:46 25 4
gpt4 key购买 nike

我正在努力设计 API 的异常处理和错误响应。谁能让我知道如何为企业应用程序设计异常。我们可以将java预定义的异常映射到应用程序异常吗?如果是这样,我们如何将预定义的 java 异常映射到我们的应用场景?如果不是,我们需要如何设计企业应用程序的异常(exception)情况?有什么指导方针吗?一旦异常被映射,它就会被交给服务层。错误消息(针对 api 响应)是否应该在服务层中构建?如果是,您能具体说明原因吗?如果没有,您能否为任何 api 的帧错误响应指定任何其他选项?可以建议您的应用程序中遵循的任何设计技术吗?提前致谢

最佳答案

因此,您需要做的就是使用 @ControllerAdvice 或 @RestControllerAdvice 编写全局异常处理程序,然后编写异常处理程序。您可以将内置异常映射到异常处理程序。因此,如果出现这些异常,则异常处理程序的代码将得到执行。并且我们可以给出定制的错误消息,以便客户了解出了什么问题。

下面是我开发的用于处理 REST API 异常的代码片段。因此,在我的代码中,我处理了两个异常:NoSuchElementException 和 MethodArgumentNotValid 异常。

例如就我而言如果您按 id 搜索记录,并且该记录不存在,您将得到 NoSuchElementException,以便客户端知道该 id 的记录不存在

对于 MethodArgumentNotValid 异常,我添加了对变量的约束例如尝试输入负 ID 时会出现此异常

@ControllerAdvice

公共(public)类 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);
}

}

关于java - 对 api 的异常处理和错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60913671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com