Предположим, что Project
- это наш класс POJO. Следующая функция обеспечивает удаление строки из базы данных. Он успешно работает с запросами POSTMAN.
@RestController
@RequestMapping(value = "/project")
@CrossOrigin
public class ProjectController {
private final ProjectServiceImpl projectServiceImpl;
------------
@DeleteMapping
@RequestMapping("/delete/{id}")
public ResponseEntity<Boolean> deleteProject(@PathVariable Long id) {
boolean result = projectServiceImpl.delete(id);
return ResponseEntity.ok(result);
}
------------
}
Но запросы из проекта Angular отклоняются с сообщением 403. И на экране консоли появляется следующее сообщение:
После некоторых поисков. Я узнал, что приложение должно отвечать на pre-flight
запросов с 200. Чтобы обеспечить это, в контроллер была добавлена следующая функция:
@GetMapping
@RequestMapping("/delete/{id:[0-9]+}")
public ResponseEntity.BodyBuilder retreive(@PathVariable Long id) {
return ResponseEntity.ok();
}
Я использовал регулярное выражение для отображения запросов, потому что без него Spring Framework выбрасывает /project/delete/{id}
уже сопоставлены с другой функцией. Angular получите свой 200OK для pre-flight
запроса таким способом. Но ответ приложения 406 для операции удаления. Angular отправляет http://localhost:8080/project/delete/2
URL в приложение. Если я отправлю ту же ссылку без функции для CORS. Строка с идентификатором 2 удалится успешно. Я что-то упустил?
Источники:
Почему Angular отправляет сообщение OPTIONS перед DELETE
Как добавить поддержку CORS в приложение Spring Boot
Для реализации прокси на стороне сервера: proxy.conf. json
{
"/project/**": {
"target": "http://localhost:8080",
"secure": false
}
}
измененный раздел в angular. json
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "issue-management:build",
"proxyConfig": "proxy.conf.json"
},
и Angular проект начался с ng serve --proxy-config proxy.conf.json
, но результат не изменился. Плюс, предложения в этой статье применены, опять же результат не изменился.