import de.juplo.thymeleaf.JuploDialect;
import java.util.HashMap;
+import java.util.Locale;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import org.apache.http.HttpStatus;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.core.env.Environment;
import org.springframework.http.MediaType;
import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.View;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.mvc.UrlFilenameViewController;
+import org.thymeleaf.exceptions.TemplateInputException;
import org.thymeleaf.resourceresolver.IResourceResolver;
import org.thymeleaf.resourceresolver.UrlResourceResolver;
+import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
return new JuploDialect();
}
+ @Bean
+ public View error(ThymeleafViewResolver resolver) throws Exception
+ {
+ return resolver.resolveViewName("templates/500", Locale.getDefault());
+ }
+
@Bean
public ErrorController errorController(ErrorAttributes errorAttributes)
{
static class CustomErrorController extends BasicErrorController
{
+ public final static String TEMPLATE_INPUT_EXCEPTION =
+ TemplateInputException.class.getCanonicalName();
+
+
CustomErrorController(
ErrorAttributes errorAttributes,
ErrorProperties errorProperties
@Override
- public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response)
+ public ModelAndView errorHtml(
+ HttpServletRequest request,
+ HttpServletResponse response
+ )
{
- response.setStatus(getStatus(request).value());
Map<String, Object> model =
getErrorAttributes(
request,
isIncludeStackTrace(request, MediaType.TEXT_HTML)
);
- return new ModelAndView("templates/error", model);
+
+ String view;
+
+ switch ((String)model.get("exception"))
+ {
+ case "org.thymeleaf.exceptions.TemplateInputException":
+ response.setStatus(HttpStatus.SC_NOT_FOUND);
+ view = "templates/404";
+ break;
+
+ default:
+ response.setStatus(getStatus(request).value());
+ view = "templates/500";
+ break;
+ }
+
+ return new ModelAndView(view, model);
}
}
}
\ No newline at end of file