我正在使用Spring Boot开发REST API,目前我遇到处理对不存在的端点的请求的问题。
处理这种情况的一种首选方法是使用JSON中的消息返回一个指定的HTTP状态代码,该消息是关于不支持的方法,目前Spring一直使用HTTP 200返回空白响应。如何用Spring完成? Somekind of filter?
修改:
当然,我不会调用现有的端点,例如我可以打电话给端点:
localhost:8080/endpoint/bla/void/test
它和我提到的结果相同。这个案例可能是我的Spring Security配置,我已经实现了WebSecurityConfigurerAdapter
,其configure
方法具有以下属性:
httpSecurity
.csrf().disable()
.authorizeRequests()
.and()
.formLogin()
.loginPage("/login")
.successHandler((httpServletRequest, httpServletResponse, authentication) -> httpServletResponse.setStatus(HttpServletResponse.SC_OK))
.failureHandler((httpServletRequest, httpServletResponse, e) -> httpServletResponse.setStatus(HttpServletResponse.SC_NOT_FOUND))
.usernameParameter("email")
.passwordParameter("password")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/index")
.logoutSuccessHandler((httpServletRequest, httpServletResponse, authentication) -> httpServletResponse.setStatus(HttpServletResponse.SC_OK))
.deleteCookies("JSESSIONID")
.invalidateHttpSession(true)
.permitAll();
关于容器,我使用的是Tomcat,我没有定义任何404错误页面。
编辑:(我的评论翻了一倍)
现在我注意到如果项目在嵌入式Tomcat中运行,那么不存在的方法处理功能就可以了。但是,如果我将项目部署到外部Tomcat容器,它将继续返回HTTP 200.有人可以向我解释这种行为吗?