JarochoEngineer
JarochoEngineer

Reputation: 1787

Problems using @Consumes(MediaType.APPLICATION_JSON) in RESTful web service

Thanks for your help. I am developing a simple RESTful webservice using JSON as a media Type. I have used successfully JSON in GET and DELETE method through the use of @Produces(MediaType.APPLICATION_JSON). However, when I want to implement POST method using @Produces(MediaType.APPLICATION_JSON) and @Consumes(MediaType.APPLICATION_JSON) I get the next error:

<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>

My source code is the next. ALL the methods are working except the POST method: package 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;

    }
}

I have the in pom.xml the next dependency satisfied:

 <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-moxy</artifactId>
 </dependency>

My request is sent in the next way using POSTMAN: POST request using JSON

Do you have any idea what can be the problem? Thank you in advance.

Cheers

Upvotes: 2

Views: 15765

Answers (2)

Harshitha M
Harshitha M

Reputation: 1

I too was facing the same issue, then I rechecked the code, I got that I was missing @Component on required class, later it worked properly.

Upvotes: 0

JarochoEngineer
JarochoEngineer

Reputation: 1787

The solution is to include in the header:

Content-Type in the header and value as application-json

Solution POST request

Upvotes: 1

Related Questions