package org.jooby;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;
import java.util.Optional;
import org.jooby.mvc.Body;
import org.jooby.mvc.POST;
import org.jooby.mvc.Path;
import org.jooby.test.ServerFeature;
import org.junit.Test;
public class BuiltinBodyParserFeature extends ServerFeature {
public enum VOWELS {
A,
B;
}
@Path("/r")
public static class Resource {
@POST
@Path("/optional/int")
public Object intBody(final @Body Optional<Integer> p) {
return p.toString();
}
@POST
@Path("/locale")
public Object localeBody(final @Body Locale l) {
return l;
}
@POST
@Path("/enum")
public Object enumBody(final @Body VOWELS v) {
return v;
}
@POST
@Path("/date")
public Object dateBody(final @Body Date d) {
return new SimpleDateFormat("dd-MM-yy").format(d);
}
@POST
@Path("/ldate")
public Object dateBody(final @Body LocalDate d) {
return d.format(DateTimeFormatter.ofPattern("dd-MM-yy"));
}
}
{
dateFormat("dd-MM-yy");
use(Resource.class);
post("/optional/int", req -> {
return req.body().toOptional(int.class);
});
post("/locale", req -> {
return req.body().to(Locale.class);
});
post("/enum", req -> {
return req.body().to(VOWELS.class);
});
post("/date", req -> {
return new SimpleDateFormat("dd-MM-yy").format(req.body().to(Date.class));
});
post("/ldate", req -> {
return req.body().to(LocalDate.class).format(DateTimeFormatter.ofPattern("dd-MM-yy"));
});
}
@Test
public void optionalBody() throws Exception {
request()
.post("/optional/int")
.body("7", "text/palin")
.expect("Optional[7]");
request()
.post("/optional/int")
.expect("Optional.empty");
request()
.post("/r/optional/int")
.body("7", "text/palin")
.expect("Optional[7]");
request()
.post("/r/optional/int")
.expect("Optional.empty");
}
@Test
public void localeBody() throws Exception {
request()
.post("/locale")
.body("es-AR", "text/palin")
.expect("es_AR");
request()
.post("/r/locale")
.body("es-AR", "text/palin")
.expect("es_AR");
}
@Test
public void enumBody() throws Exception {
request()
.post("/enum")
.body("A", "text/palin")
.expect("A");
request()
.post("/r/enum")
.body("A", "text/palin")
.expect("A");
}
@Test
public void dateBody() throws Exception {
request()
.post("/date")
.body("10-05-15", "text/palin")
.expect("10-05-15");
request()
.post("/r/date")
.body("10-05-15", "text/palin")
.expect("10-05-15");
}
@Test
public void localDateBody() throws Exception {
request()
.post("/ldate")
.body("10-05-15", "text/palin")
.expect("10-05-15");
request()
.post("/r/ldate")
.body("10-05-15", "text/palin")
.expect("10-05-15");
}
}