У меня есть локально работающий Spring Backend со следующими конечными точками:
@GetMapping(path = "/api/public/projects")
public Iterable<Project> findAllProjectsPublic(){
return projectRepository.findAll();
}
@GetMapping(path = "/api/private/projects/{id}")
public ResponseEntity<Project> findProjectById(@PathVariable Long id){
return projectRepository.findById(id)
.map(project -> ResponseEntity.ok().body(project))
.orElse(ResponseEntity.notFound().build());
}
@PostMapping(path = "/api/public/projects")
public Project createProject(@RequestBody Project project){
System.out.println(project);
return projectRepository.save(project);
}
Все конечные точки работают должным образом, когда я тестирую их в Postman.
Я реализовал службу сследующие методы в Angular:
public getAllProjects(cb) {
this.http.get<Project[]>(this.API_URL + "/public/projects")
.subscribe(projects => {
cb(null, projects);
}, error => {
cb(error, null);
})
}
public getProjectById(id: number, cb){
this.http.get<Project>(`${this.API_URL}/private/projects/${id}`)
.subscribe(project => {
cb(null, project);
}, error => {
cb(error, null);
})
}
public createProject(cb){
this.http.post(`${this.API_URL}/public/projects`, { name: 'Test'})
.subscribe(res => {
cb(null, res);
}, error => {
cb(error, null);
})
}
GET-запросы также работают и в Angular, однако POST-запрос не работает и записывает статус 403 с сообщением об ошибке:
Http failure response for (unknown url): 0 Unknown Error
КогдаЯ изменяю почтовую конечную точку весной, чтобы получить строку вместо моего тела @Request, например:
@PostMapping(path = "/api/public/projects")
public Project createProject(String projectname){
return projectRepository.save(new Project("Test"));
}
это работает!Так что должно быть что-то с телом запроса.Но тем не менее, я получаю 403 Запрещенного статуса, что для меня абсолютно бессмысленно.
Тело, которое я отправил в Почтальон:
{
"name": "Test"
}
, и это работает ...