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