Служба Java REST генерирует 405 на POST - PullRequest
0 голосов
/ 10 сентября 2018

Я занимаюсь разработкой службы JAX-RS REST.Я использую Java 1.8, Tomcat 7 и вызываю свой POST через JQuery / AJAX.

Мой код JQuery очень прост:

$.post(ctx + "/addressinfo/", data, null, "json")

, где data - простой объект JSON, содержащий базовыйинформация об адресе.

Мой контроллер REST выглядит следующим образом:

package addressservice.controller;

import javax.servlet.*;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import com.goodyear.menuadmin.plantservice.model.PlantInfo;
import com.goodyear.menuadmin.plantservice.service.PlantInfoService;

@Path("/")
public class AddressController {
    private AddressService service = new AddressService ();
    private Address address;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getAddress(@Context ServletContext ctx) throws Exception {
        this.address= plantService.getInfo("Name");

        return Response.ok(this.plant, MediaType.APPLICATION_JSON).build();
    }

    @POST
    @Consumes(MediaType.MEDIA_TYPE_WILDCARD)
    private Response saveAddress(Address data) {
        boolean isOk = addressService.updateInfo(data);

        if(!isOk) {
            Response.serverError().build();
        }

        return Response.ok(data, MediaType.APPLICATION_JSON).build();
    }
}

Однако, когда я выполняю это, я получаю ошибку 405 Method Not Allowed.Сообщение инициируется нажатием кнопки на форме.

Часть GET работает просто отлично.

Заголовки ответа:

HTTP/1.1 405 Method Not Allowed
Server: Apache-Coyote/1.1
Allow: HEAD,GET,OPTIONS
Content-Length: 0
Date: Mon, 10 Sep 2018 17:58:08 GMT

Я пробовал несколько разных попыток исправить это, начиная с добавления этого параметра init в мой tomcat web.xml

<init-param>
  <param-name>readonly</param-name>
  <param-value>false</param-value>
</init-param>

Я попытался изменить значение с $.post на следующее:

return $.ajax({
   url: ctx + "/addressinfo/",
   type: 'post',
   dataType: 'json',
   contentType: 'application/json',
   data: JSON.stringify(data)
});

РЕДАКТИРОВАТЬ Я забыл добавить определение сервлета для приложения web.xml

  <servlet>
    <servlet-name>Address Service</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>addressservice.controller</param-value>
    </init-param>
    <init-param>
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Plant Service</servlet-name>
    <url-pattern>/addressinfo/*</url-pattern>
  </servlet-mapping>

Кажется, ничто не позволяет мне публиковать сообщения в моей службе REST.

Что-то мне нужно изменить в моей конфигурации Tomcat?Или я что-то не так делаю?Я полагаю, я мог бы перейти от службы REST к сервлету, но я бы предпочел не делать этого.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

saveAddress использует только данные, которые не производит

, поэтому реализуйте

@ Производит

и в saveAddress

0 голосов
/ 11 сентября 2018

Ваш метод Java для @POST - private, он должен быть public. Джерси игнорирует частные методы в контроллерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...