【发布时间】:2019-10-10 23:36:18
【问题描述】:
我想从我的 Angular 应用程序向我的服务器发送 POST 请求(用 spring-boot 编写)。请求被拒绝,并显示消息“cors header ‘access-control-allow-origin’ missing”。
我启用了我的 Angular 应用程序“http://localhost:4200”的来源,就像我为其他 RestControllers 所做的一样(哪个工作)。据我所知,唯一的区别是我在不工作的控制器中处理 POST 请求。
控制器
@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class Controller {
@Autowired
private ReqRepository reqRepository;
@PostMapping("/reqs")
public Req saveReq (@Valid @RequestBody Req req) {
return reqRepository.save(req);
}
}
存储库
@Repository
public interface ReqRepository extends JpaRepository<Req, Long> {
}
角度服务
@Injectable()
export class ReqService {
private httpOptions = {
headers: new HttpHeaders({
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json'
})
};
constructor(private http: HttpClient) {}
sendReq(req: Req): Observable<Req> {
return this.http.post<Req>('http://localhost:8080/reqs', req, this.httpOptions);
}
}
我认为允许来源就足够了,因此请求是可能的,但它被阻止了。似乎我缺少启用 POST 请求的东西。
更新
我进一步测试了控制器,它适用于 GET 请求。 我只是更改了方法,所以问题似乎在于 POST 请求。 下面是带有 GET 测试端点而不是 POST 端点的控制器
@RestController
@CrossOrigin(origins = "http://localhost:4200")
public class Controller {
@Autowired
private ReqRepository reqRepository;
@GetMapping("/reqs")
public Page<Req> testCall (Pageable pageable) {
System.out.println("Geeting request");
return reqRepository.findAll(pageable);
}
}
【问题讨论】:
-
你允许本地主机但发送
*... -
添加cors config即可解决Check this link
-
@tricheriche 我将通配符 * 更改为“localhost:4200”,但它仍然不起作用
-
@lm1010 CrossOrigin 注释不应该工作吗?我认为所有配置都会为整个应用程序启用 cors,所以我不必在每个控制器中都这样做
-
@lm1010 在您提供的链接中创建一个 cors 配置会导致 Http 403 错误
标签: angular spring-boot