Writing vertx rest application based on JAX-RS applications
rxjava3
Add 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.