当前位置: 首页 > 知识库问答 >
问题:

Spring Boot在引发异常时不显示自定义错误

温星华
2023-03-14

我对Java/Spring领域相当陌生,我正在尝试在我的Spring Boot应用程序中使用@ControllerAdvise。ControllerAdvision捕获异常,但不显示我的自定义响应。

下面是引发异常的RestController的快照

ResponseEntity<MyClass> response = new ResponseEntity<MyClass>(HttpStatus.OK);

    try {   
        response = restTemplate.exchange(url, HttpMethod.GET, entity, MyClass.class);
    } catch (HttpClientErrorException  ex) {        
        throw ex;
    }catch (HttpServerErrorException   ex) {
        logger.debug(ex.getMessage() + " Server Status Code - " + ex.getStatusCode());
    }
    catch(Exception ex) {
        logger.debug(ex.getMessage() + " Generic Exception ");
    }

以下是@ControllerAdvice

@ControllerAdvice
public class GlobalExceptionHandler extends Exception {

    @ExceptionHandler(HttpClientErrorException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ErrorResponse errorHandle(HttpClientErrorException ex) {

          String responseBody = ex.getResponseBodyAsString(); 

          ObjectMapper mapper = new ObjectMapper();
          mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
          ErrorResponse errorResponse = new ErrorResponse();
          try { 
              errorResponse = mapper.readValue(responseBody, ErrorResponse.class); 

          } catch (JsonMappingException e) { 
          e.printStackTrace(); 
          } catch (JsonProcessingException e) { 
              e.printStackTrace(); 
          }
        return errorResponse;
    }
}
@JsonIgnoreProperties
public class ErrorResponse {
    @JsonProperty("error")
    public Error error;

      @JsonProperty("version") 
      public String version;

}

public class Error {
    @JsonProperty("code")
    public String Code;

    @JsonProperty("message")
    public String Message;

    public String getCode() {
        return Code;
    }

    public void setCode(String code) {
        Code = code;
    }

    public String getMessage() {
        return Message;
    }

    public void setMessage(String message) {
        Message = message;
    }

}
{
    "timestamp": "2019-11-20T05:42:24.126+0000",
    "status": 404,
    "error": "Not Found",
    "message": "400 Bad Request",
    "path": "myApi/somecontroller"
}
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Nov 19 23:40:26 CST 2019
There was an unexpected error (type=Not Found, status=404).
400 Bad Request

共有1个答案

濮宇定
2023-03-14

这不是一个例外,这是一个错误场景

尝试使用以下代码

@RestController
public class IndexController implements ErrorController{

    private static final String PATH = "/error";

    @RequestMapping(value = PATH)
    public String error() {
        return "Error handling";
    }

    @Override
    public String getErrorPath() {
        return PATH;
    }
}

需要重写的Spring Boot默认寄存器BasicErrorController

 类似资料:
  • 我用Spring5反应式编写了一个自定义异常 我把这个叫做服务: 但是当我到达这个页面时,会抛出一个异常,但它不是404,而是一个空指针异常和一个错误500页面,但有正确的消息? AddressNotFound永远不会抛出,只有Nullpointer异常,但会抛出我的自定义消息???你能帮帮我吗? 这是我的控制器: 谢谢

  • 我有一个使用swing的Java应用程序。我找到了一种方法来捕捉应用程序中所有未捕获的异常(见下文)。我想记录一条消息,为用户显示一个带有消息的对话框,并终止应用程序。问题是,我试图捕捉的是一些swing异常。由于Swing线程已停止,因此无法在UncaughtExceptionHandler中捕获异常后尝试显示对话框。有没有办法显示一个对话框?创建一个新的swing线程或类似的东西? 谢谢

  • 对于一个大学项目,我们需要在Java的5人小组中制作一个游戏。当我们用3D第一人称编写游戏时,我想使用lwjgl。我在运行Ubuntu的家用计算机上编写了一个测试程序。然而,我把它带到了uni,并试图在ArchLinux的机器上运行它,当试图调用Display.create()方法时,它抛出了一个异常。 这是堆栈跟踪: 无法创建可绘制组织。lwjgl。LWJGLException:X Error-

  • 问题内容: 我想在jsp中显示针对Spring安全认证异常的自定义错误消息。 对于错误的用户名或密码, 对于禁用的用户, 我是否需要为此重写AuthenticationProcessingFilter?否则我可以在jsp本身中做一些事情以找到认证异常密钥并显示不同的消息 问题答案: 在Spring安全jar内的 messages.properties中 重新定义属性。例如,添加到类路径 myMes

  • 我正试图自己解决参数问题。 我可以很容易地从NativeWebRequest获取输入参数,并将它们分派到相应的自定义@Param注释参数中。 问题是我还想在这方面做一些语法检查/验证。但如果我在“resolveArgument”中抛出异常,则会向用户显示完整的堆栈跟踪。这将是过度和不安全的。我只想向用户返回一条JSON格式的消息,以显示哪个输入参数语法有错误。

  • 我不能对我的web服务的方法抛出异常。当我在我的方法中抛出异常并尝试从Soap UI测试我的应用程序时,会出现以下错误: 和 我的问题是: 如何为JavaWeb服务编写用户定义的异常? (例如,有一个方法返回一个学生的名字。但是,如果学生在数据库中找不到,会抛出一个错误?)