自定义错误控制器中的@Controller和@RequestMapping

时间:2019-06-09 09:18:38

标签: java spring-boot spring-mvc

我有在常规REST旁边使用swaggerwebsocket的应用程序。 Swagger具有默认终结点/api/swagger-ui.html,而websocket具有默认终结点/api/websocket

我想实现将内部错误重定向到页面的自定义控制器。原来我是这样的

@Controller("/error")
public class ErrorPageController implements ErrorController {
    ....    
    @GetMapping
    public String handleGetError(HttpServletRequest request) {
        return handleError(request);
    }
    ....

但是,当我使用swagger和websocket端点时,它导致了重定向。当我更改

@Controller
@RequestMapping("/error")
public class ErrorPageController

它开始正常工作。为什么会这样?

3 个答案:

答案 0 :(得分:1)

Well Controller是spring中的专用组件,您传递的值被视为组件名称,而不是该控制器需要处理的路径。

答案 1 :(得分:1)

我认为问题出在@Controller("/error")

根据Spring Docs

@Controller

  

注释用作@Component的特化,允许   通过类路径扫描自动检测的实现类。   它通常与带注释的处理程序方法结合使用   基于RequestMapping注释。

您可以传递的可选元素:

@Controller(String value)

  

该值可能表明建议使用逻辑组件名称,以   如果有自动检测到的组件,则将其转换为Spring bean。

可以得出结论,@Controller("/error")中的 /错误只是组件名称,而不是路径。

答案 2 :(得分:0)

您应该添加@RequestMapping来定义路径

 @RequestMapping("error")