У меня есть текущий класс обслуживания, который предоставляет запросы GET, POST, а также DELETE для приложения angular:
@Path("Trips")
public class TripREST {
...
...
@POST
@Path("Trip")
@Produces("application/json")
@Consumes("application/json")
@Transactional
public Response addTrip(Trip trip) {
tripDao.addTrip(trip);
return Response.ok().entity("Trip added successfully").build();
}
...
@GET
@Path("Names/{tripId}")
@Produces("application/json")
public List<Names> loadNames(@PathParam("tripId") String tripId) {
List<Names> names = tripDao.getNames(triplId);
return names;
}
...
@DELETE
@Path("Trip/Delete/{id}")
public Response deleteTrip(@PathParam("id") String id) {
tripDao.deleteTrip(Integer.valueOf(id));
return Response.ok().entity("Trip deleted successfully").build();
}
...
}
Я пытаюсь запустить службу с URL-адреса браузера для тестирования, POST и другие методы GET работают нормально, но DELETE не работает и нет ошибок.
Получите URL-адрес, работающий нормально:
http://localhost:8080/jboss-seam-jpa/seam/resource/rest/Trips/Names/10000000
URL-адрес удаления, который не работает:
http://localhost:8080/jboss-seam-jpa/seam/resource/rest/Trips/Trip/Delete/13
Я получаю сообщение об ошибке "страница не найдена", у меня есть точка отладки внутри метод обслуживания и крючка нет.
Это сервисный вызов из приложения angular:
const httpOptions = {
headers: new HttpHeaders({ 'Accept': 'text/plain', 'Content-Type': 'text/plain' })
};
...
...
deleteTrip(id: string) {
return this.http.delete(`${this.baseUrl}/Trips/Trip/Delete/${id}`, httpOptions);
}
ОБНОВИТЬ: Я протестировал службу с POSTMAN и обнаружил, что остальные api работают нормально. Так что проблема в сервисном вызове angular. Я понимаю, что не подписывался, поэтому меняю звонок на:
deleteTrip(id: string) {
return this.http.delete(`${this.baseUrl}/Trips/Trip/Delete/${id}`, httpOptions).subscribe();
}
В консоли браузера Chrome я вижу следующее сообщение об ошибке:
zone.js:2935 OPTIONS http://localhost:8080/jboss-seam-jpa/seam/resource/rest/Funds/Instrument/Delete/12 405 (Method Not Allowed)
scheduleTask @ zone.js:2935
ZoneDelegate.scheduleTask @ zone.js:407
onScheduleTask @ zone.js:297
ZoneDelegate.scheduleTask @ zone.js:401
Zone.scheduleTask @ zone.js:232
Zone.scheduleMacroTask @ zone.js:255
scheduleMacroTaskWithCurrentZone @ zone.js:1092
(anonymous) @ zone.js:2967
proto.(anonymous function) @ zone.js:1372
(anonymous) @ http.js:2366
Observable._trySubscribe @ Observable.js:172
Observable.subscribe @ Observable.js:160
subscribeToResult @ subscribeToResult.js:23
MergeMapSubscriber._innerSub @ mergeMap.js:138
MergeMapSubscriber._tryNext @ mergeMap.js:135
MergeMapSubscriber._next @ mergeMap.js:118
Subscriber.next @ Subscriber.js:92
ScalarObservable._subscribe @ ScalarObservable.js:51
Observable._trySubscribe @ Observable.js:172
Observable.subscribe @ Observable.js:160
MergeMapOperator.call @ mergeMap.js:92
Observable.subscribe @ Observable.js:157
MaterializeOperator.call @ materialize.js:64
Observable.subscribe @ Observable.js:157
DelayOperator.call @ delay.js:66
Observable.subscribe @ Observable.js:157
DeMaterializeOperator.call @ dematerialize.js:59
Observable.subscribe @ Observable.js:157
subscribeToResult @ subscribeToResult.js:23
MergeMapSubscriber._innerSub @ mergeMap.js:138
MergeMapSubscriber._tryNext @ mergeMap.js:135
MergeMapSubscriber._next @ mergeMap.js:118
Subscriber.next @ Subscriber.js:92
ScalarObservable._subscribe @ ScalarObservable.js:51
Observable._trySubscribe @ Observable.js:172
Observable.subscribe @ Observable.js:160
MergeMapOperator.call @ mergeMap.js:92
Observable.subscribe @ Observable.js:157
FilterOperator.call @ filter.js:61
Observable.subscribe @ Observable.js:157
MapOperator.call @ map.js:57
Observable.subscribe @ Observable.js:157
InstrumentsComponent.deleteFundInstrument @ instruments.component.ts:127
(anonymous) @ InstrumentsComponent.html:139
handleEvent @ core.js:13547
callWithDebugContext @ core.js:15056
debugHandleEvent @ core.js:14643
dispatchEvent @ core.js:9962
(anonymous) @ core.js:10587
(anonymous) @ platform-browser.js:2628
ZoneDelegate.invokeTask @ zone.js:421
onInvokeTask @ core.js:4740
ZoneDelegate.invokeTask @ zone.js:420
Zone.runTask @ zone.js:188
ZoneTask.invokeTask @ zone.js:496
invokeTask @ zone.js:1517
globalZoneAwareCallback @ zone.js:1543
30056021:1 Failed to load http://localhost:8080/jboss-seam-jpa/seam/resource/rest/Trips/Trip/Delete/12: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.
Конфигурация фильтра Cors tomcat 7:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Content-Type, Accept, Authorization</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Я добавил дополнительную информацию к вопросу, в основном не нашел.
Вы должны использовать DELETE вместо POST / GET, если вы этого не сделали при вызове URL-адреса
Вероятно, вы его неправильно тестируете. Как вы делаете запрос delete с помощью браузера? Возможно, вам понадобится использовать почтальон, curl или другой клиент
Я добавил вызов службы из углового приложения.
Протестируйте это с помощью клиента отдыха, такого как почтальон, и проверьте.
Я обновил вопрос после тестирования с POSTMAN.




Что вы имеете в виду под «не работает»?