package org.jooby; import org.jooby.mvc.Body; import org.jooby.mvc.Consumes; import org.jooby.mvc.GET; import org.jooby.mvc.POST; import org.jooby.mvc.Path; import org.jooby.test.ServerFeature; import org.junit.Test; public class ReadBodyFeature extends ServerFeature { @Path("/r") public static class Resource { @Path("/text") @POST public String text(final @Body String body) { return body; } @Path("/text") @GET public String emptyBody(final @Body String body) { return body; } @Path("/json") @POST @Consumes("application/json") public String json(final @Body String body) { return body; } } { renderer(BodyConverters.toJson); parser(BodyConverters.fromJson); post("/text", (req, resp) -> resp.send(req.body().to(String.class))); get("/text", (req, resp) -> resp.send(req.body().to(String.class))); post("/json", (req, resp) -> resp.send(req.body().to(String.class))) .consumes(MediaType.json); post("/len", (req, resp) -> resp.send(req.length())); use(Resource.class); } @Test public void textBody() throws Exception { request() .post("/text") .body("..", "text/plain") .expect("{\"body\": \"..\"}"); request() .post("/r/text") .body("..x", "text/plain") .expect("{\"body\": \"..x\"}"); } @Test public void len() throws Exception { request() .post("/len") .body("..", "text/plain") .expect("{\"body\": \"2\"}"); } @Test public void emptyBody() throws Exception { request() .post("/text") .expect(400); request() .post("/r/text") .expect(400); } @Test public void jsonBody() throws Exception { request() .post("/json") .header("Content-Type", "application/json") .body("{\"x\": \"y\"}", "application/json") .expect("{\"body\": \"{\"x\": \"y\"}\"}"); request() .post("/r/json") .header("Content-Type", "application/json") .body("{\"x\": \"y\"}", "application/json") .expect("{\"body\": \"{\"x\": \"y\"}\"}"); } }