-
-
Save anonymous/8c0426646c334cecda50 to your computer and use it in GitHub Desktop.
Jersey 2.x bug. Jersey accepts requests where the content type is not specified (even though the resource is annotated with @consumes(MediaType.APPLICATION_JSON)) and whose body is empty (even though the resource expects non-empty JSON body) -- TheCuriousOne
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>com.example</groupId> | |
<artifactId>simple-service-2</artifactId> | |
<packaging>jar</packaging> | |
<version>1.0-SNAPSHOT</version> | |
<name>simple-service</name> | |
<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>org.glassfish.jersey.containers</groupId> | |
<artifactId>jersey-container-grizzly2-http</artifactId> | |
</dependency> | |
<dependency> | |
<groupId>org.glassfish.jersey.media</groupId> | |
<artifactId>jersey-media-json-jackson</artifactId> | |
<version>2.2</version> | |
</dependency> | |
<dependency> | |
<groupId>com.fasterxml.jackson.core</groupId> | |
<artifactId>jackson-core</artifactId> | |
<version>2.2.2</version> | |
</dependency> | |
<dependency> | |
<groupId>com.fasterxml.jackson.core</groupId> | |
<artifactId>jackson-annotations</artifactId> | |
<version>2.2.2</version> | |
</dependency> | |
<dependency> | |
<groupId>org.hibernate</groupId> | |
<artifactId>hibernate-validator</artifactId> | |
<version>5.0.1.Final</version> | |
</dependency> | |
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>4.9</version> | |
<scope>test</scope> | |
</dependency> | |
<dependency> | |
<groupId>org.glassfish.jersey.core</groupId> | |
<artifactId>jersey-client</artifactId> | |
</dependency> | |
</dependencies> | |
<build> | |
<plugins> | |
<plugin> | |
<groupId>org.apache.maven.plugins</groupId> | |
<artifactId>maven-compiler-plugin</artifactId> | |
<version>2.5.1</version> | |
<inherited>true</inherited> | |
<configuration> | |
<source>1.6</source> | |
<target>1.6</target> | |
</configuration> | |
</plugin> | |
<plugin> | |
<groupId>org.codehaus.mojo</groupId> | |
<artifactId>exec-maven-plugin</artifactId> | |
<version>1.2.1</version> | |
<executions> | |
<execution> | |
<goals> | |
<goal>java</goal> | |
</goals> | |
</execution> | |
</executions> | |
<configuration> | |
<mainClass>com.example.Main</mainClass> | |
</configuration> | |
</plugin> | |
</plugins> | |
</build> | |
<properties> | |
<jersey.version>2.2</jersey.version> | |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
</properties> | |
</project> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example; | |
import org.glassfish.grizzly.http.server.HttpServer; | |
import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory; | |
import org.glassfish.jersey.server.ResourceConfig; | |
import org.glassfish.jersey.jackson.JacksonFeature; | |
import java.io.IOException; | |
import java.net.URI; | |
public class Main | |
{ | |
public static final String BASE_URI = "http://localhost:8080"; | |
public static HttpServer startServer() | |
{ | |
final ResourceConfig rc = new ResourceConfig(); | |
rc.register(JacksonFeature.class); | |
rc.register(new MyResource()); | |
return GrizzlyHttpServerFactory.createHttpServer(URI.create(BASE_URI), rc); | |
} | |
public static void main(String[] args) throws IOException | |
{ | |
final HttpServer server = startServer(); | |
System.out.println(String.format("Jersey app started with WADL available at " | |
+ "%sapplication.wadl\nHit enter to stop it...", BASE_URI)); | |
System.in.read(); | |
server.stop(); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example; | |
import com.fasterxml.jackson.annotation.JsonProperty; | |
import org.hibernate.validator.constraints.NotEmpty; | |
public class MyData | |
{ | |
public MyData | |
( @JsonProperty("a") String a | |
, @JsonProperty("b") String b | |
) | |
{ | |
a_m = a; | |
b_m = b; | |
} | |
@JsonProperty("a") | |
public String getA() | |
{ | |
return a_m; | |
} | |
@JsonProperty("b") | |
public String getB() | |
{ | |
return b_m; | |
} | |
@NotEmpty | |
private final String b_m; | |
@NotEmpty | |
private final String a_m; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example; | |
import javax.ws.rs.POST; | |
import javax.ws.rs.Path; | |
import javax.ws.rs.PathParam; | |
import javax.ws.rs.QueryParam; | |
import javax.ws.rs.Produces; | |
import javax.ws.rs.Consumes; | |
import javax.ws.rs.core.MediaType; | |
@Path("/foo") | |
@Produces(MediaType.APPLICATION_JSON) | |
@Consumes(MediaType.APPLICATION_JSON) | |
public class MyResource | |
{ | |
@POST | |
public String foo(MyData myData) | |
{ | |
System.err.println("MyResource.foo"); | |
return String.format("myData.a = %s; myData.b = %s\n", myData.getA(), myData.getB()); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment