我使用弹簧服务器和角度为客户端创建应用程序。 我试图发帖请求并出现此错误:
无法加载http://localhost:8080/statuts:
" No' Access-Control-Allow-Origin'标头出现在请求的资源上。 起源' http://localhost:4200'因此不允许访问。响应的HTTP状态代码为415。"
我跟着春天的导师:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-cors-controller,没有什么对我有用。
至于我的春天代码我已经把十字原点注释用于所有其他请求,比如get和put(如果我删除这行,其他请求发送完全相同的错误)
@CrossOrigin(origins = "http://localhost:4200")
public class ExempleController {
@PostMapping(path="", consumes = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Exemple addExemple(HttpServletRequest request) throws IOException {
Exemple exemple = new Exemple();
Exemple updatedStatut = objectMapper.readerForUpdating(exemple).readValue(request.getReader());
statutRepository.save(updatedExemple);
return exemple;
}
我也尝试使用全局配置但同样的问题
我的角色请求:
create(exemple: Exemple){
return this.http.post("localhost:8080/exemples", JSON.stringify(exemple));
}
感谢您的帮助
==编辑==
我还没提到它,但是我的请求正在运行,因为它与PostMan工作正常,这是客户端和服务器之间的通信问题
答案 0 :(得分:0)
我不认为这里需要@CrossOrigin注释,除非你没有提到具体的原因。
关于使用Spring创建POST WebService,您可以按照以下示例进行操作:
@RestController
public class ExempleController {
@RequestMapping(value = "/", method = RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Exemple addExemple(@RequestBody LinkedHashMap map, HttpServletRequest request) throws IOException {
// CODE HERE
}
}
*您可以考虑用DTO类替换LinkedHashMap,但这样可以。
我希望它有所帮助; - )
答案 1 :(得分:0)
好吧我找到了答案问题是角度不会发送所需的帖子请求中的标题。
所以我将角度代码更改为:
create(exemple: Exemple){
const headers1 = new HttpHeaders({'Content-Type':'application/json; charset=utf-8'});
return this.http.post(this.ExempleAPI, JSON.stringify(exemple), {headers: headers1});
}
希望它可以帮助别人