Hi,
*Background*
I am using Dropwizard *1.0.0* and have a YAML file that contains this for
the server settings:
server:
type: simple
rootPath: /rest
applicationContextPath: /app
adminContextPath: /app/admin
connector:
type: http
port: 8084
With this I am able to successfully create and server my REST resources off
URL's like this:
http://*<host>*:8084/app/*rest*/*<my-resource-name>*
and my assets (i.e. html, css, js, images, etc) are served off URL's like
this:
http://*<host>*:8084/app/*path*/*to*/*asset*/*<asset-name>*
where "*path*" cannot be "*rest*" as that is where my REST resources are
served off.
My Dropwizard Application class overrides the *initialize* method and
registers some bundles like so:
@Override
public void initialize(final Bootstrap<AppConfiguration> bootstrap)
{
bootstrap.addBundle(new AssetsBundle("/assets/", "/", "index.html",
"assets"));
bootstrap.addBundle(new AssetsBundle("/node_modules/",
"/node_modules/", null, "node_modules"));
...
}
and also overrides the *run* method and registers my REST resources like so:
@Override
public void run(final AppConfiguration configuration, final Environment
environment)
{
environment.jersey().register(new MyRestResource1());
environment.jersey().register(new MyRestResource2());
...
}
The application itself is built using Maven which produces a shaded JAR.
My assets (i.e. html, css, js, images, etc), however, are not included in
this shaded JAR. I have kept them separate and have modified my POM file
accordingly by using the maven-jar-plugin to add the folder containing all
my assets to the JAR file. For reference this is the POM section that does
that:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true
</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Class-Path>./path/to/where/my/assets/reside/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
Everything is working as expected.
*Question*
I now want to handle cases where the user either types a URL to an unknown
REST request like:
http://*<host>*:8084/app/*rest*/*some-unknown-REST-resource*
or to an unknown asset like either of these:
http://*<host>*:8084/app/*path*/*to*/*unknown-asset-folder*/*<asset-name>*
http://*<host>*:8084/app/*path*/*to*/*asset*/*<unknown-asset-name>*
In the above cases I want to serve a custom 404 page.
What is the best way of achieving this?
*What I've already tried*
1. I have registered a custom *RuntimeException* *ExceptionMapper* in my
applications *run* method.
This however only seems to kick-in on unknown REST resources. Trying to
access unknown assets stills serves the default 404 page.
2. I tried creating a *DefaultResource* as described here:
how-to-view-custom-404-page-in-dropwizard
<http://stackoverflow.com/questions/35460345/how-to-view-custom-404-page-in-dropwizard>
but that did no seem to work.
3. I found this article: Jetty Custom Error Pages
<https://wiki.eclipse.org/Jetty/Howto/Custom_Error_Pages>
and I really would like to use the first method described there that makes
use of web.xml but am not sure how to use this with Dropwizard.
4. I tried looking in the Dropwizard configuration reference here: Reference
<http://www.dropwizard.io/1.0.0/docs/manual/configuration.html>
but could not find anything related to my requirements.
--
You received this message because you are subscribed to the Google Groups
"dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.