jersey - 200 status code returned from REST in spite of Jackson error -


i'm using rest jersey, , jackson json processing. when client sends request invalid json (in case, unrecognized property), jackson throwing exception (my resource code not executed, fails before), client status code 200.

can client different status code?

my rest method:

    @put     @consumes(mediatype.application_json)     @produces(mediatype.application_json)     public response mymethod(myclass message)     {         try         {             //my logic here             return response.ok(result).build();         }         catch (exception e)         {             return response.status(response.status.internal_server_error).entity(e.getmessage()).build();         }     } 

here exception in log jackson:

07-11-2013 11:01:06 [com.sun.jersey.spi.container.containerresponse] [http-nio-8100-exec-5] [error] - exception contained within mappablecontainerexception not mapped response, re-throwing http container org.codehaus.jackson.map.exc.unrecognizedpropertyexception: unrecognized field "tier" (class com.somthing.myclass), not marked ignorable  @ [source: org.apache.catalina.connector.coyoteinputstream@1036e65; line: 2, column: 15] (through reference chain: com.somthing.myclass["tier"])     @ org.codehaus.jackson.map.exc.unrecognizedpropertyexception.from(unrecognizedpropertyexception.java:53)     @ org.codehaus.jackson.map.deser.stddeserializationcontext.unknownfieldexception(stddeserializationcontext.java:246)     @ org.codehaus.jackson.map.deser.stddeserializer.reportunknownproperty(stddeserializer.java:604)     @ org.codehaus.jackson.map.deser.stddeserializer.handleunknownproperty(stddeserializer.java:590)     @ org.codehaus.jackson.map.deser.beandeserializer.handleunknownproperty(beandeserializer.java:689)     @ org.codehaus.jackson.map.deser.beandeserializer.deserializefromobject(beandeserializer.java:514)     @ org.codehaus.jackson.map.deser.beandeserializer.deserialize(beandeserializer.java:350)     @ org.codehaus.jackson.map.objectmapper._readvalue(objectmapper.java:2376)     @ org.codehaus.jackson.map.objectmapper.readvalue(objectmapper.java:1166)     @ org.codehaus.jackson.jaxrs.jacksonjsonprovider.readfrom(jacksonjsonprovider.java:410)     @ com.sun.jersey.json.impl.provider.entity.jacksonproviderproxy.readfrom(jacksonproviderproxy.java:139)     @ com.sun.jersey.spi.container.containerrequest.getentity(containerrequest.java:474)     @ com.sun.jersey.server.impl.model.method.dispatch.entityparamdispatchprovider$entityinjectable.getvalue(entityparamdispatchprovider.java:123)     @ com.sun.jersey.server.impl.inject.injectablevaluesprovider.getinjectablevalues(injectablevaluesprovider.java:46)     @ com.sun.jersey.server.impl.model.method.dispatch.abstractresourcemethoddispatchprovider$entityparamininvoker.getparams(abstractresourcemethoddispatchprovider.java:153)     @ com.sun.jersey.server.impl.model.method.dispatch.abstractresourcemethoddispatchprovider$responseoutinvoker._dispatch(abstractresourcemethoddispatchprovider.java:203)     @ com.sun.jersey.server.impl.model.method.dispatch.resourcejavamethoddispatcher.dispatch(resourcejavamethoddispatcher.java:75)     @ com.sun.jersey.server.impl.uri.rules.httpmethodrule.accept(httpmethodrule.java:288)     @ com.sun.jersey.server.impl.uri.rules.resourceclassrule.accept(resourceclassrule.java:108)     @ com.sun.jersey.server.impl.uri.rules.righthandpathrule.accept(righthandpathrule.java:147)     @ com.sun.jersey.server.impl.uri.rules.rootresourceclassesrule.accept(rootresourceclassesrule.java:84)     @ com.sun.jersey.server.impl.application.webapplicationimpl._handlerequest(webapplicationimpl.java:1469)     @ com.sun.jersey.server.impl.application.webapplicationimpl._handlerequest(webapplicationimpl.java:1400)     @ com.sun.jersey.server.impl.application.webapplicationimpl.handlerequest(webapplicationimpl.java:1349)     @ com.sun.jersey.server.impl.application.webapplicationimpl.handlerequest(webapplicationimpl.java:1339)     @ com.sun.jersey.spi.container.servlet.webcomponent.service(webcomponent.java:416)     @ com.sun.jersey.spi.container.servlet.servletcontainer.service(servletcontainer.java:537)     @ com.sun.jersey.spi.container.servlet.servletcontainer.service(servletcontainer.java:708)     @ javax.servlet.http.httpservlet.service(httpservlet.java:728)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:305)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)     @ com.bmc.aps.commonserver.rest.resources.filter.resthttpfilter.dofilter(resthttpfilter.java:56)     @ com.bmc.aps.portal.rest.resources.filter.portalresthttpfilter.dofilter(portalresthttpfilter.java:35)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)     @ com.bmc.aps.commonserver.logging.restloggingfilter.calldofilter(restloggingfilter.java:166)     @ com.bmc.aps.commonserver.logging.restloggingfilter.dofilter(restloggingfilter.java:122)     @ org.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:243)     @ org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:210)     @ org.apache.catalina.core.standardwrappervalve.invoke(standardwrappervalve.java:222)     @ org.apache.catalina.core.standardcontextvalve.invoke(standardcontextvalve.java:123)     @ org.apache.catalina.authenticator.authenticatorbase.invoke(authenticatorbase.java:472)     @ org.apache.catalina.core.standardhostvalve.invoke(standardhostvalve.java:171)     @ org.apache.catalina.valves.errorreportvalve.invoke(errorreportvalve.java:99)     @ org.apache.catalina.core.standardenginevalve.invoke(standardenginevalve.java:118)     @ org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:408)     @ org.apache.coyote.http11.abstracthttp11processor.process(abstracthttp11processor.java:1009)     @ org.apache.coyote.abstractprotocol$abstractconnectionhandler.process(abstractprotocol.java:589)     @ org.apache.tomcat.util.net.nioendpoint$socketprocessor.run(nioendpoint.java:1686)     @ java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1145)     @ java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:615)     @ java.lang.thread.run(thread.java:722) 

you "catch" exceptions , throw "personalized" "webapplicationexception", http code status/error different 1 thrown exception.

here example of type of personalized exception, 400 error status (bad request):

import javax.ws.rs.webapplicationexception; import javax.ws.rs.core.response;  public class personalizedexceptionbadrequest extends webapplicationexception{      /**      *       */     private static final long serialversionuid = 1l;      /**      * create http 400 (bad request) exception.      */     public personalizedexceptionbadrequest(){         super(response.status(400).build());     }      /**      * create http 400 (bad request) exception.      *       * @param message      *            string entity of 400 response.      */     public personalizedexceptionbadrequest(string message){         super(response.status(400).entity(message).type("text/plain")                 .build());     }  } 

then need "declare" in api jersey method "throws" "webapplicationexception".


Comments