405 код ответа на POST для моего Java API от POSTMAN - PullRequest
0 голосов
/ 24 августа 2018

Я создал простой java restAPi в eclipse как динамический веб-проект.Я пытаюсь выполнить POST из POSTMAN в ту же конечную точку (которую я выполняю GET), но я получаю код ответа 405.

Web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>JsonJavaApi</display-name>

<servlet>
  <servlet-name>Book API</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>test</param-value>
 </init-param>
 <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>Book API</servlet-name>
   <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

Класс Book:

public class Book {

public String author;
public String name;

public Book(String author, String name) {
    super();
    this.author=author;
    this.name=name;
}
public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Book() {
    super();
}

}

Повторный код:

@Path("/jason")
public class JavajsonRestApi {
@GET
@Path("/json")
@Produces(MediaType.APPLICATION_JSON)
public Book getJson() {

    Book book = new Book();
    book.setAuthor("eswar");
    book.setName("eswar");
    return book;
}
}

Конечная точка:

http://localhost:8080/JsonJavaApi/rest/jason/json

Как я понимаюразрешение на публикацию не дается до этой конечной точки, но как сделать так, чтобы клиентская сторона могла отправлять сообщения из самого тела, это помогает избавиться от ошибки 405?

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

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Добавить web.xml

   <servlet>
    <servlet-name>jersey-serlvet</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>com.sample.rest</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>1</load-on-startup>
</servlet>

И обновить версию Джерси 1.8 выше

0 голосов
/ 24 августа 2018

HTTP 405 код состояния означает Method Not Allowed. Поскольку у вас есть метод, помеченный @GET, и вы пытаетесь сделать @POST, вы получаете код состояния.

Так что если вы хотите сделать POST-запрос к той же конечной точке, то удалите аннотацию @GET, поскольку вы можете иметь метод, аннотированный только одной аннотацией HTTP за раз.

0 голосов
/ 24 августа 2018

HTTP 405 Коды состояния означают, что метод не авторизован, но сам URL-адрес существует и указывает на ресурс.Если вы хотите получить доступ к вашей конечной точке с использованием метода POST, вам придется либо создать другую конечную точку с аннотацией @POST поверх нее, добавить аннотацию @POST поверх вашей фактической конечной точки (не уверен, что эта работает, никогдадо сих пор пытался), или просто измените @GET на @POST.

РЕДАКТИРОВАТЬ

Я думаю, у вас есть некоторое недопонимание того, что и как работает HTTP.Вы делаете HTTP-запрос.Этот запрос может иметь тело (методы GET и DELETE не имеют тела).Тело может быть собрано весной, используя @RequestBody SomePojoClass body в качестве одного из параметров вашего метода контроллера.Пожалуйста, смотрите: https://baeldung.com/spring-request-response-body

...