AWS Lambda 上未显示 Micronaut 错误正文
Micronaut Error Body Not Showing on AWS Lambda
我按照找到的说明 here 使用 graalvm 构建了一个 Micronaut 应用程序。
我配置了一个自定义错误处理程序,当在控制器上遇到请求正文的验证错误时,returns 一个 HttpResponse。
@Factory
public class ApiExceptionHandler {
@Produces
@Singleton
@Requires(classes = {CustomException.class, ExceptionHandler.class})
public ExceptionHandler<CustomException, HttpResponse<ApiResponse>> handleCustomException() {
return (req, ex) -> {
log.error("exception=[{}], status=[{}], message=[{}]",
ex.getClass().getSimpleName(), HttpStatus.BAD_REQUEST.getCode(), ex.getMessage());
ApiResponse error = new ApiResponse.Builder(HttpStatus.BAD_REQUEST.getCode(), HttpStatus.BAD_REQUEST.getReason())
.error(new ErrorInfo(ex.getErrorCode(), ex.getErrorCode().getErrorMessage(), null))
.build();
return HttpResponse.badRequest().body(error);
};
}
}
在邮递员上测试时,错误正确显示
{
"timestamp": "2021-06-28T12:54:24.292",
"status": 400,
"description": "Bad Request",
"error": {
"code": "custom code",
"message": "Validation Error"
}
}
但是当使用 apigateway-aws-proxy
在 lambda 上测试时,没有显示错误正文
{
"statusCode": 400,
"multiValueHeaders": {
"Content-Type": [
"application/json"
]
},
"body": "{}",
"isBase64Encoded": false
}
如何在 aws lambda 函数上显示错误正文?
在响应正文中添加 @Introspected
解决了问题。
我按照找到的说明 here 使用 graalvm 构建了一个 Micronaut 应用程序。 我配置了一个自定义错误处理程序,当在控制器上遇到请求正文的验证错误时,returns 一个 HttpResponse。
@Factory
public class ApiExceptionHandler {
@Produces
@Singleton
@Requires(classes = {CustomException.class, ExceptionHandler.class})
public ExceptionHandler<CustomException, HttpResponse<ApiResponse>> handleCustomException() {
return (req, ex) -> {
log.error("exception=[{}], status=[{}], message=[{}]",
ex.getClass().getSimpleName(), HttpStatus.BAD_REQUEST.getCode(), ex.getMessage());
ApiResponse error = new ApiResponse.Builder(HttpStatus.BAD_REQUEST.getCode(), HttpStatus.BAD_REQUEST.getReason())
.error(new ErrorInfo(ex.getErrorCode(), ex.getErrorCode().getErrorMessage(), null))
.build();
return HttpResponse.badRequest().body(error);
};
}
}
在邮递员上测试时,错误正确显示
{
"timestamp": "2021-06-28T12:54:24.292",
"status": 400,
"description": "Bad Request",
"error": {
"code": "custom code",
"message": "Validation Error"
}
}
但是当使用 apigateway-aws-proxy
在 lambda 上测试时,没有显示错误正文
{
"statusCode": 400,
"multiValueHeaders": {
"Content-Type": [
"application/json"
]
},
"body": "{}",
"isBase64Encoded": false
}
如何在 aws lambda 函数上显示错误正文?
在响应正文中添加 @Introspected
解决了问题。