我使用攔截器來確定語言,並使用spring localeResolver中的構建來使用該信息。我第一次閱讀網址(或任何地方的地方)。我使用xx-XX格式的語言環境。
private Locale getLocaleFromUrl(String url) {
Locale result = null;
String localePart;
int slashes = url.indexOf('/', 1);
if (slashes == -1) {
// Use full URL
localePart = url.substring(1);
} else {
localePart = url.substring(1, slashes);
}
int dashPosition = localePart.indexOf('-');
if (dashPosition > -1) {
result = new Locale(localePart.substring(0, dashPosition), localePart.substring(dashPosition + 1));
}
return result;
}
之後,我從進入的網址中去除的語言環境,做這樣的事情:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
boolean redirected = doRedirect(request, response, url, urlLocale, RequestHelper.getContextPath());
if (!redirected) {
String newUrl = stripUrl(locale, url);
if (newUrl.isEmpty()) {
newUrl = "/";
}
request.setAttribute("gsforwared", Boolean.TRUE);
request.setAttribute("originalUrl", newUrl);
RequestDispatcher rd = request.getRequestDispatcher(newUrl);
rd.forward(request, response);
}
private boolean doRedirect(HttpServletRequest request, HttpServletResponse response, String url, String urlLocale, String contextPath) {
if (StringUtils.startsWith(url, "/".concat(urlLocale))) {
return false;
}
if (url.startsWith("/static")) {
return false;
}
if (url.startsWith("/error")) {
return false;
}
String redirUrl = "/".concat(urlLocale).concat(url);
if (request.getQueryString() != null) {
redirUrl = redirUrl.concat("?").concat(request.getQueryString());
}
response.setHeader("Location", contextPath + redirUrl);
response.sendError(HttpServletResponse.SC_MOVED_PERMANENTLY);
return true;
}
我也是一個屬性添加到我之前檢查請求這樣做,這樣我就不會連續循環。
您的請求應該沒有區域設置轉發