Локальный сервер Tomcat возвращает 405 Метод не разрешен - PullRequest
0 голосов
/ 15 января 2020

Я изучаю REST API и запускаю его на Tomcat Apache 7 на моей локальной машине.

Настройка:

  • Tomcat Apache 7
  • JAX-RS
  • Java 8

У меня есть локальная база данных mysql, с которой взаимодействуют эти остальные API.

Я могу запустить метод GET с и без параметров, но когда я пытаюсь запустить метод PUT, я получаю метод 405, который не разрешен. Я исследовал ошибку и не могу найти проблемы, схожие с тем, с чем я сталкиваюсь.

Мой сервисный код:

@PUT
    @Path("/users/status/{user_id}")
    @Produces(MediaType.APPLICATION_JSON)
    public int setInactive(@PathParam("user_id") int user_id) throws ClassNotFoundException{
        return userDao.markInActive(user_id);
    }

Этот API-интерфейс остальных обновляет поле в базе данных.

В журналах моего локального сервера tomcat нет связанных элементов в списке.

Я попытался добавить фильтр в файл. xml файл, и он не оказал никакого влияния.

<filter>
      <filter-name>CorsFilter</filter-name>
      <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
      <init-param>
          <param-name>cors.allowed.headers</param-name>
          <param-value>Accept,Accept-Encoding,Accept-Language,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization,Connection,Content-Type,Host,Origin,Referer,Token-Id,User-Agent, X-Requested-With</param-value>
      </init-param>
      <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, PUT, DELETE, OPTIONS, HEAD</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>CorsFilter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

Это ничего не изменило.

URL-адрес, который я использую:

http://localhost:8080/UserManagementTwo/rest/UserService/users/status/1

Не уверен, откуда go.

Любая помощь будет принята.

Спасибо.

@PUT был там, но не показывался.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Посмотрев еще немного, я нашел свой ответ здесь:

Очень своеобразно: HTTP Status 405 - Метод не разрешен

Браузер выдаст GET запросить ваш ресурс, который вы объявили как @PUT на стороне сервера и помещаете в него из кода на стороне клиента. Браузер пытается «извлечь» (или получить) ресурс, и ничего не существует для @ GET

Я запустил его в почтальоне, и он работает.

Спасибо всем.

0 голосов
/ 15 января 2020

Вы должны использовать обозначение метода-ответчика @PUT.

Измените свой код на:

@Path("/users/status/{user_id}")
@Produces(MediaType.APPLICATION_JSON)
@PUT
public int setInactive(@PathParam("user_id") int user_id) throws ClassNotFoundException{
    return userDao.markInActive(user_id);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...