Writing vertx rest application based on JAX-RS applications
rxjava3Add the following dependency to the dependencies section of your build descriptor:
pom.xml):
<dependency>
<groupId>com.dream11</groupId>
<artifactId>vertx-rest</artifactId>
<version>x.y.z</version>
</dependency>
build.gradle file):
dependencies {
compile 'com.dream11:vertx-rest:x.y.z'
}
Note: Replace x.y.z above with one of the released versions
Create the application REST Verticle by extending com.dream11.rest.AbstractRestVerticle class.
The AbstractRestVerticle here does the following:
@Path) in the package and adds an instance of each of the resource classes to
the resteasy-deployment registryFilters and ExceptionMappers and any other custom Providers to the resteasy-deploymentpublic class RestVerticle extends AbstractRestVerticle {
public RestVerticle() {
// starts http server with default options
// All classes with @Path annotation in the specified package are registered with the router
super("com.dream11.package");
}
@Override
protected ClassInjector getInjector() {
// Add your implmentation of injector
return null;
}
}
Use the following constructor to pass custom HTTP Server Options
public RestVerticle() {
super("com.dream11.package", new HttpServerOptions().setPort(8080)); // starts http server with provided options
}
@Path("/test")
public class TestRoute {
@GET
@Consumes(MediaType.WILDCARD)
@Produces(MediaType.APPLICATION_JSON)
@ApiResponse(content = @Content(schema = @Schema(implementation = String.class)))
public CompletionStage<String> test() {
return Single.just("Hello World")
.toCompletionStage();
}
}
@TypeValidationError(code=<errorCode>, message=<errorMessage>) on DTO parameters to send custom error code and message
when parsing of parameter fails@TypeValidationError can also be used for Integer, Long, Float or Double types in @HeaderParam, @QueryParam etc. If you
want to use @TypeValidationError on a parameter of type other than these types you can create a custom converter similar to IntegerParamConverter and a provider extending ParamConverterProvider. ReferenceRestError as an enum to specify error codes, messages and http status codes to be returned in response for your exceptions
RestException with the restError to return error response in the following format
{
"error": {
"code": "UNKNOWN_EXCEPTION",
"message": "Something went wrong",
"cause": "Cannot connect to mysql database"
}
}
com.dream11.rest.exception.mapper for mappers provided by
default20 seconds500 status code
is returned in case of timeouts.getInjector of AbstractRestVerticle to return an implementation of the ClassInjector interfacecom.dream11.rest.injector.GuiceInjector for an exampleAnnotate your provider classes with @Provider to automatically register them with resteasy deployment
Alternatively, if your provider class necessitates a constructor with parameters, you can override the following method in AbstractRestVerticle to register the provider object
public class RestVerticle extends AbstractRestVerticle {
@Override
protected List<Object> getProviderObjects() {
List<Object> providerObjects = super.getProviderObjects();
// add your provider object with custom constructor to the list
return providerObjects;
}
}
You can create custom json providers by
JsonProvider interface, defined in JsonProvider and then,public class RestVerticle extends AbstractRestVerticle {
@Override
protected JsonProvider getJsonProvider() {
// return your custom json provider
}
}
Please refer tests for an example application
Follow this doc to generate swagger specification.