All Downloads are FREE. Search and download functionalities are using the official Maven repository.

artoria.exception.support.AbstractServletErrorHandler Maven / Gradle / Ivy

The newest version!
package artoria.exception.support;

import artoria.common.Result;
import artoria.exception.ExceptionUtils;
import artoria.exception.ServletErrorHandler;
import artoria.util.StringUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

import static artoria.common.constant.Charsets.STR_UTF_8;
import static java.lang.Boolean.FALSE;

public abstract class AbstractServletErrorHandler implements ServletErrorHandler {
    protected static final String TEXT_HTML = "text/html";

    protected String createHtmlString(String errorCode, String errorMessage) {
        return "\n" +
        "\n" +
        "\n" +
        "    An error has occurred. \n" +
        "\n" +
        "\n" +
        "    

\n" + " An error has occurred. \n" + "

\n" + (StringUtils.isNotBlank(errorCode) ? " Error Code: " + errorCode + "
\n" : "" ) + " Error Message: " + errorMessage + "
\n" + " Please check the log for details if necessary.
\n" + "\n" + "\n"; } protected Object writeHtmlString(HttpServletRequest request, HttpServletResponse response, String htmlString) { // response write html response.setContentType(TEXT_HTML + "; charset=" + STR_UTF_8); try { response.getWriter().write(htmlString); } catch (IOException e) { throw ExceptionUtils.wrap(e); } // no return return null; } protected Object buildHtmlResult(HttpServletRequest request, HttpServletResponse response, Throwable throwable) { // create html String errorMessage = throwable != null ? throwable.getMessage() : "An error has occurred. (Response Status: " + response.getStatus() + ") "; String htmlString = createHtmlString(null, errorMessage); // response write html return writeHtmlString(request, response, htmlString); } protected Object buildOtherResult(HttpServletRequest request, HttpServletResponse response, Throwable throwable) { String errorMessage; int respStatus = response.getStatus(); errorMessage = throwable != null ? throwable.getMessage() : "An error has occurred. (Response Status: " + respStatus + ") "; return new Result(FALSE, null, errorMessage); } @Override public Object handle(HttpServletRequest request, HttpServletResponse response, Throwable throwable) { // Get accept info String accept = request.getHeader("Accept"); accept = StringUtils.isNotBlank(accept) ? accept.toLowerCase() : null; // Build result if (accept != null && accept.contains(TEXT_HTML)) { return buildHtmlResult(request, response, throwable); } else { return buildOtherResult(request, response, throwable); } } }