我有一个简单的休息终点如下:
@RequestMapping(method = RequestMethod.GET, value = "/error")
public ResponseEntity<String> genericErrorHandler() {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("");
}
这样做的目的是使其成为我的REST API的默认错误响应。但是,Spring终端无法识别此端点。永远不会被称为。问题是路径本身。这是“/错误”。如果我将其更改为其他任何内容,例如“/ foo”,它将起作用。
根据这个文档:
在启动时,Spring Boot会尝试查找/ error的映射。通过 约定,以/ error结尾的URL映射到相同的逻辑视图 名称:错误。如果没有找到/ error到View的映射,Spring Boot定义了自己的后备错误页面 - 即所谓的“Whitelabel” 错误页面“(仅包含HTTP状态信息的最小页面) 任何错误详细信息,例如来自未捕获的异常的消息。)
因此。每当抛出异常且任何@ExceptionHandler
带注释的方法都不处理它时,Spring引导就会调用此端点(/error
)。我只是想摆脱spring boot提供的默认“Whitelabel错误页面”,而是使用这个端点。我误解了/错误页面的目的吗?或者我做错了什么?
=====的更新 ==================
所以,我能够通过强制包含/ error端点的类来实现/ error端点,以实现接口ErrorController,如可能重复的帖子
然而,在此之后,我的所有端点都被重新路由到此/错误。意思是,以前工作的所有东西,比如/ user / 1或/ orders,现在都会回退到/错误。你知道这里出了什么问题吗?
这是定义/错误的位置:
@RestController
@RequestMapping("/error")
public class FallbackErrorController implements ErrorController {
private static final String ERROR_PATH = "/error";
@RequestMapping(method = RequestMethod.GET)
public ResponseEntity<String> genericErrorHandler() {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("A fake error");
}
@Override
public String getErrorPath() {
return ERROR_PATH;
}
}
答案 0 :(得分:2)
这对我有用:
@Override
public String getErrorPath() {
return PATH;
}
返回错误页面的路径。 即。
private static final String PATH = "/error";
现在它被重定向到/错误路由。
Sequencially,
@Controller
@RequestMapping(value="/")
public class HomeController implements ErrorController{
private static final String PATH = "/error";
@GetMapping(value=PATH)
public String error(Model model) {
return "error/error404";
}
@Override
public String getErrorPath() {
return PATH;
}
}