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

如何为spring boot rest应用程序创建自定义错误消息

闾丘鸣
2023-03-14

我用Spring Boot来处理REST调用。在本文中,我使用以下方法实现了一个控制器类:

@GetMapping("/{id}")
public ResponseEntity<employeeDetails> getEmployee(@PathVariable Long id) {
    Optional<Employee> employee = employeeService.getEmployee(id);
    if (employee.isPresent()) {
        return ResponseEntity.ok(employee.get());
    } else {
        throw new ApiRequestException("Could not find requested employee");
    }
}

我现在发送一个请求,请求一名不存在的员工。我已验证else块是否已执行。我的问题是没有返回自定义错误消息,而是在浏览器控制台中看到了与实现ApiRequestException之前相同的旧错误消息:

Get url和Get请求参数400

我无法理解为什么看不到自定义错误消息。以下是我如何实现ApiRequestException的:

>

  • 我已经实现了ApiRequestException类:

    public class ApiRequestException extends RuntimeException {
    
      public ApiRequestException(String message) {
        super(message);
      }
    }
    

    我实现了一个异常处理程序:

    @ControllerAdvice
    public class ApiExceptionHandler {
    
      @ExceptionHandler(value = { ApiRequestException.class })
      public ResponseEntity<Object> handleApiRequestException(ApiRequestException e) {
        HttpStatus badRequestStatus = HttpStatus.BAD_REQUEST;
        ApiRequestError apiRequestError = new ApiRequestError(badRequestStatus, e.getMessage());
        return ResponseEntity.status(badRequestStatus)
                             .body(apiRequestError);
      }
        }
    

    正如您所见,异常处理程序使用的是ApiRequestError类。我也实现了这一点:它只是一个存储消息字符串和httpStatus的类。

    调试应用程序时,我已验证是否调用了异常处理程序。但出于对它的喜爱,我无法解释为什么我的浏览器控制台中没有自定义错误消息,而是Spring Boot生成的默认消息。有人能帮忙吗?

  • 共有1个答案

    靳祺然
    2023-03-14

    尝试扩展响应实体ExceptionHandler

    @ControllerAdvice
    public class ApiExceptionHandler extends ResponseEntityExceptionHandler{
        ...
    }
    
     类似资料:
    • 问题内容: 我可以看到使用表单时如何向字段添加错误消息,但是模型表单呢? 这是我的测试模型: 我的模型表格: 在字段中的错误信息:和是: 这是必填栏 如何以模型形式进行更改? 问题答案: 对于简单的情况,你可以指定自定义错误消息

    • 问题内容: 出于某种原因,在以下代码段中似​​乎无法使用构造函数委托: 运行此给出。关于为什么的任何想法,或者是否有更好的方法来创建新的子类?我不知道的本地构造函数存在问题吗? 问题答案: 更新您的代码以将原型分配给Error.prototype和instanceof以及您的assert工作。 但是,我只是抛出您自己的对象并只检查name属性。 根据评论进行编辑 在查看了注释并试图记住为什么要分配

    • 我在spring boot应用程序中有一个自定义的授权失败错误消息,它在localhost中运行良好,但在azure中部署时返回如下结果:

    • 问题内容: 我正在编写一个Swing应用程序,该应用程序需要充当浏览器中的applet或独立应用程序,即它可以包含在JFrame或JApplet中。 在这种情况下,我想向用户显示一个自定义模式对话框(即,一个具有自定义布局和逻辑的复杂对话框,而不仅仅是简单的JOptionPane提示之一)。如果对话框是完全包含在应用程序窗口中的轻量级组件,那就很好。 同时,应用程序中将发生后台处理(网络线程,动画

    • 我希望能够添加自定义属性到一个请求遥测。我可以使用以下代码来完成此操作: 在尝试进行一些研究时,我发现了以下内容:https://github.com/azure/azure-functions/wiki/app-insights-early-preview 自定义遥测 您可以将.NET App Insights SDK引入并创建自己的TelemetryClient。没有任何冲突,但有一些建议:

    • 问题内容: 序列化器很少,例如 我们如何创建自己的自定义序列化程序? 问题答案: 在这里,您有一个示例,将自己的序列化器/解串器用于Kafka消息值。对于Kafka消息密钥是同一回事。 我们希望将MyMessage的序列化版本作为Kafka值发送,并再次将其反序列化为使用方的MyMessage对象。 在生产者端序列化MyMessage。 您应该创建一个实现org.apache.kafka.comm