In Dropwizard I use @Valid annotations for my resource methods:
public class Address {
@NotNull
String street
...
}
@Path("/address")
@Produces(MediaType.APPLICATION_JSON)
public class AddressResource {
@POST
public MyResponse addAddress(@Valid Address address) {
if (address == null) {
throw new WebApplicationException("address was null");
}
...
}
}
On application start I register a custom WebApplicationExceptionMapper
which handles WebApplicationExceptions
. Thus, for addresses with the value null, the exception is thrown and handled in the mapper which generates a useful response. However, if the address is not null but street
is, Dropwizard automatically generates a response and sends it to the client (which I dislike).
How do I interfere this response so that in the end it is also handled by the mapper?
Dropwizard registers their own constraint violation exception mapper which you can override.
Since Jersey does not yet support the
@Priority
annotation on the exception mappers (https://java.net/jira/browse/JERSEY-2437), you should disable the registration of the Dropwizard's mappers before register your own. Here is an fragment of the Application's run method and an exception mapper:In newer Dropwizard versions (for e.g. 0.9.2), I had to do:
env.jersey().register(new JsonProcessingExceptionMapper(true));