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

时间:2019-08-20 14:01:20

标签: spring

当我的Web应用程序中不存在的项目通过URL调用时,Spring会以JSON响应,并带有诸如(时间,状态,错误,消息,路径)之类的数据。因此,我需要更改此JSON的结构,具体来说,我需要删除路径。 我该怎么做? 在我的项目中应在哪里实施例外的自定义? 致以最诚挚的问候!

Json response to modify

2 个答案:

答案 0 :(得分:1)

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

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

这里YourResponse只是一个POJO,可以具有您想在客户端呈现的任何结构。 @ExceptionHandler指定方法中将处理的错误类型(包括更具体的类型)。 @ResponseBody说,您的返回值将以JSON格式显示在您的响应中。

答案 1 :(得分:0)

您可以尝试以下方法:

@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方法。如果您不希望它在同一个类中,则可以将其委托给单独的类。要进一步深入阅读,请查找@ControllerAdvice之类的注释。