Спасибо за помощь. Я разрабатываю простой веб-сервис RESTful, используя JSON в качестве медиа-типа. Я успешно использовал JSON в методе GET
и DELETE
с использованием @Produces(MediaType.APPLICATION_JSON)
. Однако, когда я хочу реализовать POST
метод с использованием @Produces(MediaType.APPLICATION_JSON)
и @Consumes(MediaType.APPLICATION_JSON)
я получаю следующую ошибку:Проблемы с использованием @Consumes (MediaType.APPLICATION_JSON) в веб-службе RESTful
<h1>HTTP Status 415 - Unsupported Media Type</h1>
<HR size="1" noshade="noshade">
<p>
<b>type</b> Status report
</p>
<p>
<b>message</b>
<u>Unsupported Media Type</u>
</p>
<p>
<b>description</b>
<u>The server refused this request because the request entity is in a format not supported by the requested resource for the requested method.</u>
</p>
Мой исходный код является следующим. ВСЕ методы работают, за исключением метода POST
: пакет RESTful.library.resources;
import java.util.List;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import RESTful.library.service.BookService;
import RESTful.library.model.Books;
/** This class will implement all the request on the resource:
* GET
* PUT
* DELETE
* POST
*/
@Path("/books")
public class BookResource {
DataBaseSQLite db = new DataBaseSQLite();
BookService bookService = new BookService();
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Books> getBooks(){
List<Books> books = bookService.getAllBooks();
return books;
}
@GET
@Path("/{bookID}")
@Produces(MediaType.APPLICATION_JSON)
public Books getBook(@PathParam("bookID") int ID){
return bookService.getBook(ID);
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Books addBook(Books book) {
if (book != null)
return bookService.addBook(book);
return null;
}
@DELETE
@Path("/{bookID}")
@Produces(MediaType.APPLICATION_JSON)
public String removeBook(@PathParam("bookID") int ID){
boolean removed= bookService.deleteBook(ID);
String answer="Removed successfully";
if(removed = false){
answer="Not removed";
}
return answer;
}
@GET
@Path("/name/{bookName}")
@Produces(MediaType.APPLICATION_XML)
public Books findBook(@PathParam("bookName") String name) {
if (name != null)
return bookService.findBook(name);
return null;
}
}
Я имею в pom.xml следующей зависимости удовлетворены:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
Мой запрос отправляется следующим способом, используя Почтальон:
Есть ли у вас какие-либо идеи, что может быть проблемой? Заранее спасибо.
Приветствия
И как ваш запрос HTTP выглядит , Вы уверены, что отправляете заголовок Content-Type и Accept в качестве приложения/json для запроса POST? –
Спасибо за ваш ответ. Я опубликовал снимок экрана запроса POST, пытаясь включить все детали. – Xalapa
Можете ли вы показать заголовки http в своем запросе? –