对于SpringBoot,在jdk1.8下可使用注解完成,较为简单,而且细粒度也比较客观:
@RequestMapping("/saveXYZPoints")
@ResponseBody
@CrossOrigin
public String saveXYZPoints(@RequestBody List<XYZ> list){
xyzService.save(list);
return "Success";
}
过程中有以下问题未解决:
1.为何在jdk1.7下,该注解会报错,目前还未明了,如果有热心网友知道 ,可以在评论里回复:
Error:(37, 5) java: 对于属性<clinit>, 注释org.springframework.web.bind.annotation.CrossOrigin缺少值
官方参考文章:
https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/CrossOrigin.html
https://stackoverflow.com/questions/33925205/crossorigin-annotation-stops-compilation-in-intellij 这篇文章里也提到,最好结论说这是个bug ┭┮﹏┭┮ 解决的方法就是升级到最新的版本jdk
为了在jdk1.7也能运行可以考虑这种方式:
@Configuration
public class CROS {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*");
}
};
}
}
也可以选择更精确的控制:
//代码摘自网络,只为说明配置更加精确,更加细粒度
@Configuration
public class CORSConfiguration {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
// registry.addMapping("/api/**");
registry.addMapping("/**")
.allowedOrigins("http://domain.com", "http://domain2.com")
.allowedMethods("GET", "POST", "DELETE", "PUT", "OPTIONS")
.allowCredentials(false).maxAge(3600);
}
};
}
}
备忘与:2018年4月18日18:35:42