Java spring引导jar和intellij idea中错误处理的不同行为
我用spring boot开发了一个应用程序 应用程序包含一个全局异常处理程序,当我从Intellij IDEA运行(或调试)应用程序时,该处理程序工作正常 但当我执行最后一个jar(由maven clean install创建)时,错误处理程序不起作用(以及向客户机提供所需信息的所有编程异常)已被替换为API中的whitepage 500错误或500错误响应 这是我想要传递给客户端的示例结果(当我使用IDE运行应用程序时,它将被发送给客户端) 这是从Java spring引导jar和intellij idea中错误处理的不同行为,java,spring,spring-boot,error-handling,Java,Spring,Spring Boot,Error Handling,我用spring boot开发了一个应用程序 应用程序包含一个全局异常处理程序,当我从Intellij IDEA运行(或调试)应用程序时,该处理程序工作正常 但当我执行最后一个jar(由maven clean install创建)时,错误处理程序不起作用(以及向客户机提供所需信息的所有编程异常)已被替换为API中的whitepage 500错误或500错误响应 这是我想要传递给客户端的示例结果(当我使用IDE运行应用程序时,它将被发送给客户端) 这是从java-jarapp返回的消息: {
java-jar
app返回的消息:
{
"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);
}
有人能帮我解决这个问题吗?错误到底是什么,错误处理是什么样子的?据我们所知,您在IDE的类路径上使用了一些在外部没有的库it@Stultuske我发现,若代码是用java-jar运行的,在异常过程中会抛出一些异常,所以我不知道这个问题是否更有效。因为一个代码有两个不同的结果,这是我的主要问题OK,所以您的处理程序只处理特定类型的异常,而抛出另一种类型的异常。
@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());
}