0

I have a class looking like this:

public class Test {

    @JsonProperty("name")
    private String name;

    public Test(){}

    public String getName() {
        return name;
    }

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

Also there is an endpoint class using javax.ws.rs:

@Path("/Test")
public class Endpoint {

    @POST
    @Consumes("application/json")
    @Produces("application/json")
    @HeaderParam("Accept") @DefaultValue("application/json")
    public Response createTest(String json) {
        return Response.status(Response.Status.ACCEPTED).entity(json).build();
    }
}

This works as expected.

Question: How can I make createTest() take the "Test" class as a parameter instead of "String"?

Trial: Sending the following gives "415 Unsupported Media Type" when using "Test" as a paramter to createTest():

POST ../Endpoint/ HTTP/1.1
Host: localhost:8080
Accept: application/json
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 56d06798-2b32-57fc-c22a-0240aceb8f98

{
  "name": "Kalle"
}
Grains
  • 950
  • 3
  • 16
  • 35
  • You can either use `@FormParam` to expect argument as a class or you can use object mapper to parse json into your class.. – z21 Jul 14 '16 at 10:41
  • Objectmapper works but much more nice with "auto" unmarshall. `@FormParam("test") String json` results in no value(null). `@FormParam("test") Test test` results in _com.sun.jersey.spi.inject.Errors.processErrorMessages_ at server startup... – Grains Jul 14 '16 at 10:53

1 Answers1

0

I think you have to use Jersey 2.xx version.

public class LoginRequest {

private String userName;
private String password;

public LoginRequest(){
    super();
}

public String getUserName() {
    return userName;
}

public void setUserName(String userName) {
    this.userName = userName;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

}

Your Resource with a Bean (here goes your Bean Test)

@POST
@Path("login")
@Consumes(MediaType.APPLICATION_JSON)
public Response login(LoginRequest request) {
....
}

and the dependecies:

<properties>
    <jersey.version>2.22.1</jersey.version>
    <jackson.version>2.6.1</jackson.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<version>1</version>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey</groupId>
            <artifactId>jersey-bom</artifactId>
            <version>${jersey.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.4</version>
    </dependency>

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet-core</artifactId>
    </dependency>

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

    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-common</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
    </dependency>

</dependencies>

The reason 415 Unsupported Media Type issue is because you don't have the correct dependecies.

... have fun

Wilder Valera
  • 986
  • 9
  • 11