X-Git-Url: https://juplo.de/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fde%2Fjuplo%2Fthymeproxy%2FApplication.java;h=0840e957814c8b7ab12d6f126bb848e927187a2e;hb=551b78259633a9d1c42d8ed1c8e081ba5432fc06;hp=d7aa61d17bc214119202951eea66233ffcc5bca2;hpb=322949a0946d0a152d98f57675f4e91ea83f1738;p=maven-thymeleaf-skin diff --git a/src/main/java/de/juplo/thymeproxy/Application.java b/src/main/java/de/juplo/thymeproxy/Application.java index d7aa61d..0840e95 100644 --- a/src/main/java/de/juplo/thymeproxy/Application.java +++ b/src/main/java/de/juplo/thymeproxy/Application.java @@ -1,13 +1,26 @@ package de.juplo.thymeproxy; +import de.juplo.thymeleaf.JuploDialect; import java.util.HashMap; import java.util.Map; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; 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.BasicErrorController; +import org.springframework.boot.autoconfigure.web.ErrorAttributes; +import org.springframework.boot.autoconfigure.web.ErrorController; +import org.springframework.boot.autoconfigure.web.ErrorProperties; +import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.context.annotation.Bean; import org.springframework.core.Ordered; import org.springframework.core.env.Environment; +import org.springframework.http.MediaType; +import org.springframework.web.servlet.ModelAndView; +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.resourceresolver.IResourceResolver; import org.thymeleaf.resourceresolver.UrlResourceResolver; @@ -15,8 +28,12 @@ import org.thymeleaf.templateresolver.TemplateResolver; @SpringBootApplication -public class Application +public class Application extends WebMvcConfigurerAdapter { + @Autowired + private ServerProperties properties; + + @Bean public RegexUrlHandlerMapping proxiedHandlerMapping( ProxyHttpRequestHandler proxy, @@ -71,15 +88,75 @@ public class Application return resolver; } + @Bean + public TemplateResolver jsonTemplateResolver( + IResourceResolver resources, + Environment env + ) + { + TemplateResolver resolver = new TemplateResolver(); + resolver.setResourceResolver(resources); + resolver.setPrefix("http://localhost:8080/thymeleaf/"); + resolver.setSuffix(".json"); + resolver.setTemplateMode("JSON"); + resolver.setCharacterEncoding("UTF-8"); + resolver.setCacheable(Boolean.valueOf(env.getProperty("thymeproxy.cacheable"))); + return resolver; + } + @Bean public UrlResourceResolver thymeleafResourceResolver() { return new UrlResourceResolver(); } + @Bean + public JuploDialect juploDialect() + { + return new JuploDialect(); + } + + @Bean + public ErrorController errorController(ErrorAttributes errorAttributes) + { + return new CustomErrorController(errorAttributes, properties.getError()); + } + + + @Override + public void addViewControllers(ViewControllerRegistry registry) + { + registry.addViewController("/").setViewName("forward:index.html"); + } + public static void main(String[] args) { SpringApplication.run(Application.class, args); } + + + static class CustomErrorController extends BasicErrorController + { + CustomErrorController( + ErrorAttributes errorAttributes, + ErrorProperties errorProperties + ) + { + super(errorAttributes, errorProperties); + } + + + @Override + public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) + { + response.setStatus(getStatus(request).value()); + Map model = + getErrorAttributes( + request, + isIncludeStackTrace(request, MediaType.TEXT_HTML) + ); + return new ModelAndView("templates/error", model); + } + } } \ No newline at end of file