Skip to content

Instantly share code, notes, and snippets.

@jonikarppinen
Last active June 16, 2021 02:19
Show Gist options
  • Star 55 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save jonikarppinen/662c38fb57a23de61c8b to your computer and use it in GitHub Desktop.
Save jonikarppinen/662c38fb57a23de61c8b to your computer and use it in GitHub Desktop.
Example of replacing Spring Boot "whitelabel" error page with custom error responses (with JSON response body)
package com.company.project.controllers;
import com.company.project.model.api.ErrorJson;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* Based on the helpful answer at http://stackoverflow.com/q/25356781/56285,
* with error details in response body added.
*
* @author Joni Karppinen
* @since 20.2.2015
*/
@RestController
public class CustomErrorController implements ErrorController {
private static final String PATH = "/error";
@Value("${debug}")
private boolean debug;
@Autowired
private ErrorAttributes errorAttributes;
@RequestMapping(value = PATH)
ErrorJson error(HttpServletRequest request, HttpServletResponse response) {
// Appropriate HTTP response code (e.g. 404 or 500) is automatically set by Spring.
// Here we just define response body.
return new ErrorJson(response.getStatus(), getErrorAttributes(request, debug));
}
@Override
public String getErrorPath() {
return PATH;
}
private Map<String, Object> getErrorAttributes(HttpServletRequest request, boolean includeStackTrace) {
RequestAttributes requestAttributes = new ServletRequestAttributes(request);
return errorAttributes.getErrorAttributes(requestAttributes, includeStackTrace);
}
}
@vijaymohanp
Copy link

I am getting HTTP ERROR 406 code. Anyone has this problem before, at server side everything looks good, but client rejecting the request. I am thinking it is because, browser expecting html and from the server we are trying to send json response?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment