java - spring boot jar和intellij idea中错误处理的不同行为
问题描述
我用spring boot开发了一个应用程序。
应用程序包含一个全局异常处理程序,当我从 Intellij IDEA 运行(或调试)应用程序时可以正常工作。
但是,当我执行最终 jar(由 maven clean install 创建)时,错误处理程序不起作用(以及所有向客户端提供所需信息的编程异常)已被替换为白页 500 错误或 API 中的 500 错误响应。
这是我想传递给客户端的示例结果(当我使用 IDE 运行应用程序时它将被发送给客户端)
{
"apierror": {
"status": "BAD_REQUEST",
"timestamp": {
"month": "OCTOBER",
"year": 2019,
"dayOfMonth": 16,
"dayOfWeek": "WEDNESDAY",
"dayOfYear": 289,
"monthValue": 10,
"hour": 15,
"minute": 18,
"nano": 904000000,
"second": 44,
"chronology": {
"id": "ISO",
"calendarType": "iso8601"
}
},
"code": "error.user.not-found-Username",
"message": "error.user.not-found-Username",
"localizedMessage": "error.user.not-found-Username",
"subErrors": null,
"Username": "notfoundusername"
}
}
这是从java -jar
应用程序返回的消息:
{
"timestamp": "2019-10-16T15:17:20.337+0000",
"status": 500,
"error": "Internal Server Error",
"message": "No message available",
"path": "/login"
}
这是错误处理程序:
@Order(Ordered.HIGHEST_PRECEDENCE)
@ControllerAdvice
@RequiredArgsConstructor
public class BaseBusinessExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(BaseBusinessException.class)
public ResponseEntity<Object> handleBaseBusinessException(
final BaseBusinessException ex,
final HttpServletRequest request
) {
ApiError apiError = new ApiError(ex.getHttpStatus());
String acceptLanguage = request.getHeader("Accept-Language");
if (Empty.isNotEmpty(acceptLanguage)) {
Locale locale = new Locale(acceptLanguage);
apiError.setLocalizedMessage(initializeMessage(ex.getErrorCode(), ex.getMessageArgs(), locale));
}
apiError.setCode(ex.getErrorCode());
apiError.setMessage(initializeMessage(ex.getErrorCode(), ex.getMessageArgs(), Locale.getDefault()));
if (Empty.isNotEmpty(ex.getMessageArgs())) {
Map<String, Object> meta = new HashMap<>(ex.getMessageArgs());
apiError.setMeta(meta);
}
return buildResponseEntity(apiError);
}
这就是抛出异常的地方:
User user = userRepository.findOneByUsername(arg.getUsername());
if (user == null) {
throw new UserNotFoundException(arg.getUsername());
}
谁能帮我解决这个问题?
解决方案
推荐阅读
- css - Firefox 没有显示完整的 CSS 动画,但 Chrome 和 IE 有
- angular - JSON到Angular中的动态HTML表
- mysql - 使用不包括少数字段的组函数 - 链接许多表而不将其数据与另一个表混合 - 对动态表执行查询
- c# - 如何在一个表单中一键提交多个部分表单?
- visual-studio-2013 - Visual Studio Express 2013 和 Visual Studio 2013 之间的区别
- sql - 如何提高 SQL Server 中以下查询的性能?
- jquery - 从用户的本地系统获取文件的属性(最后修改日期)
- kubernetes - 在 Kubernetes 上调试 colissionCount
- php - 验证失败后如何启用提交按钮控制器-Laravel
- python - rpy2:如何正确地将 NaN 从 panda.DataFrame 转换为 NA 到 R?