package mock.controllers.api.json;
import com.github.aesteve.vertx.nubes.annotations.Controller;
import com.github.aesteve.vertx.nubes.annotations.mixins.ContentType;
import com.github.aesteve.vertx.nubes.annotations.params.Param;
import com.github.aesteve.vertx.nubes.annotations.params.RequestBody;
import com.github.aesteve.vertx.nubes.annotations.routing.http.GET;
import com.github.aesteve.vertx.nubes.annotations.routing.http.POST;
import com.github.aesteve.vertx.nubes.marshallers.Payload;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.RoutingContext;
import mock.domains.Dog;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller("/json/")
@ContentType("application/json")
public class JsonApiTestController {
@GET("noContent")
public void noContent() {}
@GET("jsonobject")
public void sendJsonObject(Payload<JsonObject> payload) {
JsonObject json = new JsonObject();
json.put("Bill", "Cocker");
payload.set(json);
}
@GET("jsonarray")
public void sendJsonArray(Payload<JsonArray> payload) {
JsonObject json = new JsonObject();
json.put("Bill", "Cocker");
List<JsonObject> list = new ArrayList<>(1);
list.add(json);
payload.set(new JsonArray(list));
}
@GET("map")
public void sendMap(Payload<Map<String, String>> payload) {
Map<String, String> dogs = new HashMap<>(2);
dogs.put("Snoopy", "Beagle");
dogs.put("Bill", "Cocker");
payload.set(dogs);
}
@GET("array")
public void sendArray(Payload<List<String>> payload) {
List<String> dogs = new ArrayList<>(2);
dogs.add("Snoopy");
dogs.add("Bill");
payload.set(dogs);
}
@GET("dog")
public void sendDomainObject(Payload<Dog> payload) {
Dog snoopy = new Dog("Snoopy", "Beagle");
payload.set(snoopy);
}
@GET("dogs")
public void sendManyDomainObjects(Payload<List<Dog>> payload) {
List<Dog> dogs = new ArrayList<>(2);
Dog snoopy = new Dog("Snoopy", "Beagle");
Dog bill = new Dog("Bill", "Cocker");
dogs.add(snoopy);
dogs.add(bill);
payload.set(dogs);
}
@POST("postdog")
public void postDog(@RequestBody Dog dog, Payload<Dog> payload) {
payload.set(dog); // echo back
}
@GET("fail/:statusCode")
public void sendStatusCode(RoutingContext context, @Param("statusCode") Integer statusCode) {
context.fail(statusCode);
}
@GET("exception")
public void sendException() {
throw new RuntimeException("Manually thrown exception");
}
}