java - Setting the (http)status code (to something other than 500) after an exception in Spring -


as title implies want change http status after exception occured. short background able show error page need send status code of 200 client. (on error status codes dumps data , shows generic error popup)

to test have:

    @requestmapping(value= "/err")     public string throwerror()     {         throw new illegalstateexception();     } 

in web-xml:

    <error-page>         <error-code>500</error-code>         <location>/errorpage</location>     </error-page> 

and errorpage controller (gets called)

    @requestmapping(value = "/errorpage", method = requestmethod.get)     public string errorpage(httpservletresponse response, model model, locale locale ) {         int errorstatus = response.getstatus();         response.reset();         model.addattribute("errorstatus", errorstatus);         response.setstatus(httpservletresponse.sc_accepted);         logger.debug("---------->" + response.getstatus());         return "errorpage";     } 

the catalina log output 200 response in client is:

failed load resource: server responded status of 500 (internal server error)

somewhere spring encodes exception statuscode 500 (i suppose in handlerexceptionresolver chain?) , errorpage controller called. spring seems remember exception thrown , ignores (or recodes?) status code 500 after controller returns.

the confusing (or maybe not?) thing if return response entity errorpage controller , set status code honored. eg:

    return new responseentity(httpstatus.accepted); 

i suppose not bug feature , spring knows better me , should change way of implementing whole thing. (!!?)

i cannot return responseentity since need render error page. suppose if streched myself render page in controller , put responseentity achieve want seems ... wrong.

there must way of controlling status code returned other returning responseentity (and bypassing whatever mechanism resetting 500). or telling framework not re encode thrown exception status code 500.

to complete have tried setting statuscode in handlerexceptionresolver , returning modelandview same disappointing result. (500) have tried @controlleradvice @exceptionhandler .. same result..

any clues happens after returning controller (or handlerexceptionresolver) sets status code , how can disable it? maybe unknown setting in configuration causes this?

you can set status code using following code

@requestmapping(value= "/err") public string throwerror() {      throw new illegalstateexception(message,                          errorcode); } 

Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -