具有路径/错误的Spring Boot rest端点

时间:2018-03-31 21:30:56

标签: java spring spring-boot

我有一个简单的休息终点如下:

@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;
    }
}

1 个答案:

答案 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;
    }
}