import de.juplo.thymeleaf.JuploDialect;
import java.util.HashMap;
-import java.util.Locale;
import java.util.Map;
+import java.util.Properties;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.web.ErrorAttributes;
+import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.core.env.Environment;
-import org.springframework.web.servlet.View;
+import org.springframework.http.HttpStatus;
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.springframework.web.servlet.handler.SimpleMappingExceptionResolver;
+import org.thymeleaf.TemplateEngine;
import org.thymeleaf.resourceresolver.IResourceResolver;
import org.thymeleaf.resourceresolver.UrlResourceResolver;
-import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.TemplateResolver;
@Bean
public RegexUrlHandlerMapping proxiedHandlerMapping(
ProxyHttpRequestHandler proxy,
- UrlFilenameViewController views
+ UrlThymeleafViewController views
)
{
RegexUrlHandlerMapping mapping = new RegexUrlHandlerMapping();
mapping.setOrder(Ordered.HIGHEST_PRECEDENCE);
Map<String, Object> mappings = new HashMap<>();
- mappings.put("/thymeleaf/.*\\.html", proxy);
mappings.put("/img/.+", proxy);
mappings.put("/css/.+", proxy);
mappings.put("/js/.+", proxy);
}
@Bean
- public UrlFilenameViewController urlFilenameViewController()
+ public UrlThymeleafViewController urlThymeleafViewController(
+ TemplateEngine engine
+ )
{
- return new UrlFilenameViewController();
+ return new UrlThymeleafViewController(engine);
}
@Bean
}
@Bean
- public View error(ThymeleafViewResolver resolver) throws Exception
+ public SimpleMappingExceptionResolver simpleMappingExceptionResolver()
{
- return resolver.resolveViewName("templates/500", Locale.getDefault());
+ SimpleMappingExceptionResolver resolver =
+ new SimpleMappingExceptionResolver();
+
+ Properties mappings = new Properties();
+ mappings.setProperty("TemplateInputException", "templates/404");
+
+ resolver.setExceptionMappings(mappings);
+ resolver.setDefaultErrorView("templates/error");
+ resolver.setWarnLogCategory("exception");
+ return resolver;
}
@Bean
- public ExceptionMappings exceptionMappings()
+ public ErrorController errorController(
+ ApplicationContext context,
+ ErrorAttributes errorAttributes
+ )
{
- return new ExceptionMappings();
+ ExceptionResolverErrorController controller =
+ new ExceptionResolverErrorController(
+ context,
+ errorAttributes,
+ properties.getError()
+ );
+ controller.addErrorMapping(HttpStatus.NOT_FOUND, "templates/404");
+ controller.setDefaultErrorView("templates/error");
+ return controller;
}