我尝试使用Spring Boot 1.3.3在示例项目中启用CORS
我尝试按照此link的所有说明操作,但我仍然无法看到结果。
在我的Application.java中,我有以下代码。
$.each(tracking, function(i,tracking){
$parcel.append(
'<ul>'+
'<li>Carrier: '+ tracking.carrier + '</li>'+
'<li> Tracking Number:' + tracking.tracking_num +'</li>'+
'</ul>'
);
})
当我使用@SpringBootApplication
public class Application {
private static final String[] REQUEST_METHOD_SUPPORTED = { "GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS", "HEAD" };
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/rest/**").allowedOrigins("*").allowedHeaders("*").allowedMethods(REQUEST_METHOD_SUPPORTED);
}
};
}
}
和GET
时,一切正常,但当我尝试使用POST
,PUT
,DELETE
或OPTIONS
时。此外,我尝试添加此属性PATCH
,但仍然无法使其正常工作
我收到以下错误:
spring.mvc.dispatch-options-request:true
成功完成请求
你们有个想法我该如何解决这个问题?您是否有一个教程,我可以使用Resolving exception from handler [null]: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'OPTIONS' not supported
Invoking @ExceptionHandler method: public final org.springframework.http.ResponseEntity<java.lang.Object> org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler.handleException(java.lang.Exception,org.springframework.web.context.request.WebRequest)
Request method 'OPTIONS' not supported
Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
或PUT
查看使用CORS的示例?
---更新---
这是我的控制器
PATCH
}
我是否需要手动创建OPTIONS方法?我的控制器中没有处理OPTIONS请求的方法
答案 0 :(得分:0)
感谢您的回答和评论。
最后,答案必须与这里发布的答案相结合;我们被一个没有发送内容类型的客户端消费,所以我们在尝试在PATCH或PUT之前做一个OPTIONS时得到403;在其余客户端发送内容类型后,我们能够处理该请求。
因此,在我的情况下,如果请求包含内容类型并且您不需要进行任何解决,则以下代码可以正常工作。
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/rest/**").allowedOrigins("*").allowedHeaders("*").allowedMethods(REQUEST_METHOD_SUPPORTED);
}
};
}
但是,如果有人要求在没有内容类型的情况下允许请求OPTIONS,则需要使用此Simple CORS Filter中提到的简单过滤器并更改以下行:
response.setHeader("Access-Control-Allow-Headers", "");
我希望这可以在将来帮助某人。