gpt4 book ai didi

java - 抛出异常以在 API 中向用户传播响应消息是最佳做法吗?

转载 作者:行者123 更新时间:2023-11-30 07:42:17 25 4
gpt4 key购买 nike

我们有一个基于微服务的架构,它由主要的应用程序服务器模块和库模块组成。在主应用服务器中,我们只是接受请求并通过调用 libs 模块中可用服务层的 REST API 方法上的请求和响应对象提供响应。

  parent--
------apps
---server
---Controller Class
------libs
---core
---Service Layer
---Dao Layer

为了传播错误消息以便它们可以使用响应对象(仅在 Controller 类中可用)发送给客户端,我们在服务层中抛出自定义异常,以便我们可以将错误消息发送到 Controller 类。这种方法的问题在于,我们在所有情况下都会抛出异常,例如,即使输入不正确或用户没有权限,我们也会抛出异常,在这种情况下,我们只能向用户返回带有错误消息的响应。

我的问题是 - 仅仅为了将错误消息从服务层传播到 Controller 而抛出自定义异常是否是正确的方法?如果否,那么我们如何将错误消息传播到 Controller 层?

服务层---

public String serviceLayerMethod(String param) throws AssetException {
try {
if(param==null){
throw new CustomException;
} else{
return param;
}
} catch (CustomException e) {
LOGGER.error(CustomExceptionEnum.PARAMNULL_EXCEPTION.getMessage(),e);
throw new CustomException(CustomExceptionEnum.PARAMNULL_EXCEPTION.getMessage(), e);
}
}

Controller 层---

public Response restAPI(Request request) {
try {
response.setMessage(service.serviceLayerMethod());
response.setSuccess(true);
} catch (CustomException e) {
response.setMessage(e.getMessage());
response.setSuccess(false);
}
return response
}

最佳答案

我看不出这样做有什么问题,但您可以使用 Spring 在 Rest API 上为您做的更好。

在 Spring 上,您可以使用 @RestControllerAdvice@ExceptionHandler 来捕获任何异常并为用户返回一条友好的消息。喜欢:

@Slf4j
@RestControllerAdvice
public class ErrorHandlerController {

@ExceptionHandler(CustomException.class)
public ResponseEntity<ApiErrorResponse> handleApiException(CustomException ex, Locale locale) {
log.error("Custom error catch with the code {}", ex.getErrorCode(), ex);
ApiErrorResponse error = new ApiErrorResponse(ex, locale);
return new ResponseEntity<>(error, ex.getHttpStatus());
}
}

关于java - 抛出异常以在 API 中向用户传播响应消息是最佳做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54947191/

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