Как реализовать запрос DELETE с помощью resteasy и java?

У меня есть текущий класс обслуживания, который предоставляет запросы 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>

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

ernest_k 13.10.2018 10:31

Я добавил дополнительную информацию к вопросу, в основном не нашел.

user2304483 13.10.2018 10:35

Вы должны использовать DELETE вместо POST / GET, если вы этого не сделали при вызове URL-адреса

Marcel 13.10.2018 10:39

Вероятно, вы его неправильно тестируете. Как вы делаете запрос delete с помощью браузера? Возможно, вам понадобится использовать почтальон, curl или другой клиент

ernest_k 13.10.2018 10:39

Я добавил вызов службы из углового приложения.

user2304483 13.10.2018 10:48

Протестируйте это с помощью клиента отдыха, такого как почтальон, и проверьте.

Nicholas K 13.10.2018 11:42

Я обновил вопрос после тестирования с POSTMAN.

user2304483 14.10.2018 06:30
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
7
380
0

Другие вопросы по теме