当我在Spring MVC中配置我的RequestMappings时,我想在使用OPTIONS方法时自动生成适当的Allow标头.
例如,使用此控制器:
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping(method = RequestMethod.GET)
ResponseEntitytest() {
return new ResponseEntity<>("test",HttpStatus.OK);
}
}
现在如果我对该URL做OPTIONS请求,我得到405,方法不允许.相反,我希望它能自动回复
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new handlerinterceptor() {
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {
if("OPTIONS".equalsIgnoreCase(request.getmethod())){
response.setHeader("Allow","GET,OPTIONS");
response.setStatus(204);
//Todo figure out the @Controller and what possible methods exist
return false;
}
return true;
}
//Deleted excess methods for brevity
});
}
没有我编写自定义拦截器,这个功能是否存在?如果没有,我如何解决Todo并查找OPTIONS调用发生在同一URL上的注释?
最佳答案
延伸Sotiros和jhadesdev的答案.如果使用Java Config(如在Spring Boot中),您可以通过配置@Bean来配置dispatchServlet以启用OPTIONS请求,如下所示:
@Bean
public dispatcherServlet dispatcherServlet() {
dispatcherServlet servlet = new dispatcherServlet();
servlet.setdispatchOptionsRequest(true);
return servlet;
}
然后我创建了一个静态助手,接受HttpMethods varargs,如下所示:
public static ResponseEntity
这使得创建我自己的OPTIONS映射变得如此简单:
@RequestMapping(method = RequestMethod.OPTIONS)
ResponseEntity
虽然我认为Spring MVC可以自动提供OPTIONS响应,但你不能通过Interceptor,但可能通过自定义的dispatcherServlet.
编写自己的OPTIONS响应的好处是,在某些情况下根据用户的角色自定义OPTIONS是有意义的.例如,API的未经身份验证的用户可能会收到允许GET,OPTIONS但管理员会获得完整的API允许GET,PUT,DELETE,OPTIONS您可以根据在进行OPTIONS调用时检查用户的角色来自定义响应.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。