dimanche 19 avril 2015

Spring Boot - Error Controller to handle either JSON or HTML

I have a spring boot application.


I have a custom error controller, that is mapped to using ErrorPage mappings. The mappings are largely based on HTTP Status codes, and normally just render a HTML view appropriately.


For example, my mapping:



@Configuration
class ErrorConfiguration implements EmbeddedServletContainerCustomizer {

@Override public void customize( ConfigurableEmbeddedServletContainer container ) {
container.addErrorPages( new ErrorPage( HttpStatus.NOT_FOUND, "/error/404.html" ) )
}


And my error controller:



@Controller
@RequestMapping
public class ErrorController {

@RequestMapping( value = "/error/404.html" )
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public String pageNotFound( HttpServletRequest request ) {
"errors/404"
}


This works fine - If I just enter a random non-existent URL then it renders the 404 page.


Now, I want a section of my site, lets say /api/.. that is dedicated to my JSON api to serve the errors as JSON, so if I enter a random non-existent URL under /api/.. then it returns 404 JSON response.


Is there any standard/best way to do this? One idea I tried out was to have a @ControllerAdvice that specifically caught a class of custom API exceptions I had defined and returned JSON, and in my standard ErrorController checking the URL and throwing an apprpriate API exception if under that API URL space (but that didn't work, as the ExceptionHandler method could not be invoked because it was a different return type from the original controller method).


Is this something that has been solved?


Aucun commentaire:

Enregistrer un commentaire