package org.transgalactica.fwk.web.view; import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.AntPathMatcher; import org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator; /** * * *\/toto/* + /toto/* + /toto/1 = /toto/ /* + * * * */ public class PatternRequestToViewNameTranslator extends DefaultRequestToViewNameTranslator { private Logger logger = LoggerFactory.getLogger(PatternRequestToViewNameTranslator.class); private AntPathMatcher matcher = new AntPathMatcher(); private Map<String, String> patterns; public PatternRequestToViewNameTranslator() { } @Override protected String transformPath(String lookupPath) { String path = super.transformPath(lookupPath); for (Entry<String, String> pattern : patterns.entrySet()) { if (matcher.match(pattern.getKey(), path)) { logger.debug("Match pattern '{}', returning path '{}'", pattern.getKey(), pattern.getValue()); return pattern.getValue(); } } logger.debug("No pattern match returning DefaultRequestToViewNameTranslator path '{}'", path); return path; } public Map<String, String> getPatterns() { return Collections.unmodifiableMap(patterns); } public void setPatterns(Map<String, String> patterns) { this.patterns = new LinkedHashMap<>(patterns); } }