Dropwizard
HTTP
The port settings of the Jetty server can also be done via the configuration file.
server: applicationConnectors: - type: http port: 18080 adminConnectors: - type: http port: 18081
Logging
The logging of the server and services is also done via the configuration file.
server: requestLog: timeZone: UTC appenders: - type: file currentLogFilename: /var/log/areacodes/access.log threshold: ALL archive: true archivedLogFilenamePattern: /var/log/areacodes/access.%d.log.gz archivedFileCount: 14 logging: level: INFO appenders: - type: console threshold: WARN target: stderr - type: file currentLogFilename: /var/log/areacodes/broker.log archivedLogFilenamePattern: /var/log/areacodes/broker.%d.log.gz archivedFileCount: 14 timeZone: UTC
Metrics
The Metrics library is used to get an insight view into the running server.
Adding additional metrics
To add additional metrics a MetricRegistry
is needed. It can be obtained during the bootstrap phase.
@Override public void initialize(Bootstrap<PostalCodeConfiguration> bootstrap) { metricRegistry = bootstrap.getMetricRegistry(); }
Jetty
Adding additional HTML pages
If you want to add additional HTML pages (like a welcome page) then you can do this in the initialize
method of the Application class.
Found on Stackoverlow Configure dropwizard to server index.html for (almost) all routes?
I've done this without changing my configuration. In fact, it only took me one line of code, to be put in the initialize method of my Application class:
bootstrap.addBundle(new AssetsBundle("/app", "/", "index.html", "static"));Which basically says to serve anything under /app inside my JAR file under the URL pattern /, with index.html as the default file. This bundle will be named static, but you could pick whatever name you like.
Note that I'm using version 0.7.0-rc2 of Dropwizard, I'm not sure whether it works for earlier versions as well.
Serialization
Jackson is used for de-/serialization of the data.
@JsonProperty
is used to annotate field or method for serialization.
If a field should be ignored during the serialization process the annotation @JsonIgnore
can be used or the field can be marked as transient
.
Swagger
Swagger can be used to document the REST services registered the dropwizard instance.
Add Maven Dependency
<dependency> <groupId>io.federecio</groupId> <artifactId>dropwizard-swagger</artifactId> <version>0.5.2</version> </dependency>
Register Swagger UI
private final SwaggerDropwizard swaggerDropwizard = new SwaggerDropwizard(); @Override public void initialize(Bootstrap<TestConfiguration> bootstrap) { ... swaggerDropwizard.onInitialize(bootstrap); } @Override public void run(TestConfiguration configuration, Environment environment) throws Exception { ... swaggerDropwizard.onRun(configuration, environment); }
Annotate Resources
Swagger only scans resources which have an @Api annotation on them. Resources need to be annotated to be listed by swagger.
Annotate Methods
At least one method must be annotated for the resource to be visible for swagger.