content: package mock.controllers.injection;
  
  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.annotations.services.Service;
  import com.github.aesteve.vertx.nubes.marshallers.Payload;
  import integration.TestVerticle;
  import io.vertx.core.json.JsonArray;
  import io.vertx.core.json.JsonObject;
  import io.vertx.ext.web.Router;
  import mock.domains.Dog;
  import mock.services.DogService;
  
  @Controller("/inject")
  @ContentType("application/json")
  public class TestInjectedController {
  
  	@Service(TestVerticle.DOG_SERVICE_NAME)
  	private DogService dogService; // a service must be injected
  
  	@Service(TestVerticle.SNOOPY_SERVICE_NAME)
  	private Dog snoop; // a simple object registered as a service should be injected, too
  
  	private Router router;
  
  	@GET("/service")
  	public void getDog(@Param("idx") Integer i, Payload<Dog> payload) {
  		payload.set(dogService.getDog(i));
  	}
  
  	@GET("/class")
  	public void getSimpleClass(Payload<Dog> payload) {
  		payload.set(snoop);
  	}
  
  	@POST("/readBodyAsJsonObject")
  	public JsonObject readBodyAsJsonObject(@RequestBody JsonObject json) {
  		return json;
  	}
  
  	@POST("/readBodyAsJsonArray")
  	public JsonArray readBodyAsJsonArray(@RequestBody JsonArray json) {
  		return json;
  	}
  
  	@GET("/router")
  	public JsonObject getRouter() {
  		return new JsonObject().put("router", router.toString());
  	}
  }
  