spring - Jersey custom ExceptionMapper not called on 400 Bad Request (when validation fails) -
i'm using jersey spring web services. catching exceptions , formatting response sent caller have added implementation of exceptionmapper.
though being called when explicitly throw exception within controller, when json field validation fails exception mapper not called , response sent **may not null (path = checknotification.arg0.tyres, invalidvalue = null) **
@provider public class genericexceptionmapper implements exceptionmapper<throwable> { @override public response toresponse(throwable ex) { system.out.println("exception mapper !!!"); return response.status(404).entity(ex.getmessage()).type("application/json").build(); } } <servlet> <servlet-name>jersey-servlet</servlet-name> <servlet-class> org.glassfish.jersey.servlet.servletcontainer </servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value> com.help.rest.controller, com.fasterxml.jackson.jaxrs.json </param-value> </init-param> <init-param> <param-name>javax.ws.rs.application</param-name> <param-value>com.help.filter.featureregistration</param-value> </init-param> <init-param> <param-name>jersey.config.beanvalidation.enableoutputvalidationerrorentity.server</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
jersey version 2.22.1 spring version 4.2.4
i made work changing
@provider public class genericexceptionmapper implements exceptionmapper<throwable> { @override public response toresponse(throwable ex) { system.out.println("exception mapper !!!"); return response.status(404).entity(ex.getmessage()).type("application/json").build(); } }
to
@provider public class genericexceptionmapper implements exceptionmapper<constraintviolationexception> { @override public response toresponse(constraintviolationexception ex) { system.out.println("exception mapper !!!"); return response.status(404).entity(ex.getmessage()).type("application/json").build(); } }
though i'm able catch exception not getting exact class , field failed constraint.
resolved found set containing required fields in contraintviolationexception, accessed using ex.getconstraintviolations()
made work changing
@provider public class genericexceptionmapper implements exceptionmapper<throwable> { @override public response toresponse(throwable ex) { system.out.println("exception mapper !!!"); return response.status(404).entity(ex.getmessage()).type("application/json").build(); } }
to
@provider public class genericexceptionmapper implements exceptionmapper<constraintviolationexception> { @override public response toresponse(constraintviolationexception ex) { system.out.println("exception mapper !!!"); return response.status(404).entity(ex.getmessage()).type("application/json").build(); } }
to exact exception details, field failed constraint use constraintviolationexception's getconstraintviolations(). method provides set constraint violations.
Comments
Post a Comment