Spring" No' Access-Control-Allow-Origin'报头" POST请求

时间:2018-05-15 15:18:18

标签: java spring angular http

我使用弹簧服务器和角度为客户端创建应用程序。 我试图发帖请求并出现此错误:

  

无法加载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工作正常,这是客户端和服务器之间的通信问题

2 个答案:

答案 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});
}

希望它可以帮助别人