Hi Anjum,
One way to serve custom pages for HTML errors is to use Jetty's error
handler facility. In your Application.run() method add lines like these:
public class MyApplication extends Application<MyConfiguration> {
// ...
@Override
public void run(final MyConfiguration configuration, final Environment
environment) {
// ...
final ErrorPageErrorHandler epeh = new ErrorPageErrorHandler();
// 400 - Bad Request, leave alone
epeh.addErrorPage(401, "/error/general-error");
epeh.addErrorPage(402, "/error/general-error");
epeh.addErrorPage(403, "/error/403");
epeh.addErrorPage(404, "/error/404");
epeh.addErrorPage(405, 499, "/error/general-error");
epeh.addErrorPage(500, 599, "/error/general-error");
environment.getApplicationContext().setErrorHandler(epeh);
// ...
}
}
Then define the /error/* handlers like you do for any other Jersey resource.
Regards,
Douglas
On Sunday, August 7, 2016 at 5:08:42 PM UTC-4, Anjum Naseer wrote:
>
> 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.