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

如何修改默认的Json错误响应Spring?

吴镜
2023-03-14

当通过URL调用我的Web应用程序中不存在的项目时,Spring会使用JSON响应,其中包含(时间、状态、错误、消息、路径)等数据。所以,我需要更改这个JSON的结构,特别是我需要删除路径。我该怎么做?我应该在我的项目中在哪里实现异常的自定义?向大家问好!

json响应修改

共有2个答案

魏宸
2023-03-14

你可以试试这样的方法:

@RestController
@RequestMapping("/")
public class TestController {

    @GetMapping("/exception")
    void getException() {
        throw new MyCustomException("Something went wrong!");
    }

    class MyCustomException extends RuntimeException {
        MyCustomException(String message) {
            super(message);
        }
    }

    class CustomError {
        private String message;
        private Integer code;

        CustomError(String message, Integer code) {
            this.message = message;
            this.code = code;
        }

        public String getMessage() {
            return message;
        }

        public Integer getCode() {
            return code;
        }
    }

    @ExceptionHandler(MyCustomException.class)
    public CustomError handleMyCustomException(Exception ex) {
        return new CustomError("Oops! " + ex.getMessage(), HttpStatus.BAD_REQUEST.value());
    }
}

快速简单,您只需创建自己的异常和自己的错误对象(稍后将其转换为json)。

如果你问把这样的东西放在哪里...好吧,你可以为异常制作一个单独的类(还有一个异常包),并在你的控制器中放一个小的@ExceptionHandler方法。如果你不希望它在同一个类中,你也可以将它委托给单独的类;要进一步深入阅读,请查找像@ControlllerAdvie这样的注释。

饶元章
2023-03-14

在Spring MVC应用程序中,使用ContollerAdvice类很容易按类型处理错误。您可以为方法调用中出现的异常定义自己的处理程序。例如。:

@ControllerAdvice
public class ErrorHandler {
    @ExceptionHandler(value = ExceptionToHandle.class)
    @ResponseBody
    public YourResponse handle(ExceptionToHandle ex) {
        return new YourResponse(ex.getMessage());
    }
}

在这里,您的响应只是一个POJO,它可以有您想要在客户机上展示的任何结构。ExceptionHandler指定将在方法中处理哪些类型的错误(包括更具体的类型)。ResponseBody表示,返回的值将以JSON格式显示在响应中。

 类似资料:
  • 我有一个REST控制器,它可以返回如下产品列表: 电流输出 为了让我们的JS网格库能够正常工作,我需要修改响应,使其看起来像: 期望输出 控制器 有没有一种简单的方法可以使用本地Spring库修改JSON响应?

  • 问题内容: 当前,来自spring boot的错误响应包含如下标准内容: 我正在寻找一种方法来消除响应中的“ exception”属性。有没有办法做到这一点? 问题答案: 如有关错误处理的文档中所述,您可以提供自己的bean,该bean实施以控制内容。 一个简单的方法就是继承。例如:

  • 问题内容: 如何将列的默认值从“无”更改为其他值?例如,如果我在创建行时未指定日期,则希望我的日期的默认值是0000-00-00。 我在phpMyAdmin中了解这一点,但是我不确定如何通过命令提示符来做到这一点。 我也了解在添加列时如何执行此操作。但是,我所有的列均已制成,并且其中一些包含数据。 通过搜索,我找到了这条线,但是我不确定那是我想要的吗? 问题答案: 使用 ALTER TABLE 来

  • 我看了一下这个答案,但我不知道如何使它适应我的代码:reverfit应该是BEGIN_OBJECT,但应该是BEGIN_ARRAY 这是我的接口 定位响应

  • 由于我没有找到任何fox 415响应错误的工作示例,我仍然无法理解Spring为什么不能处理以下请求: 并返回: 以下是请求的一个CURL版本: Een修改后如下: 并使用如下所示: 没有解决问题。 我错过了什么?

  • 我用这样的控制器构建了一个json REST服务: 它工作得很好,但是现在我需要修改所有的响应,并为它们添加“状态”和“消息”字段。我读过一些解决方案: 从所有控制器方法返回某个特定类的对象,例如RestResponse,它将包含“状态”和“消息”字段(但这不是通用解决方案,因为我必须修改所有控制器并以新样式编写新控制器) 拦截所有带有方面的控制器方法(但在这种情况下,我无法更改返回类型) 如果我