Я просмотрел много сообщений на эту тему, но все еще не нашел решения.Java, Spring, JSP encoding
Когда я отправляю данные (URL) с моего JSP на контроллер Spring, он отображается как «fc-bayern-münchen-5». Умлаут закодирован таким образом, но я пытался убедиться, что мое приложение использует кодировку UTF-8, которая, похоже, не работает.
URL-адрес в Firefox показывает, как http://localhost:8081/team/fc-bayern-münchen-5 и при вставке в другом месте, как показывает http://localhost:8081/team/fc-bayern-m%C3%BCnchen-5, который я думаю, как ожидается, для UTF-8.
Я пробовал использовать URLDecoder.decode(url.getBytes(), "UTF-8")
, но это тоже не сработало.
JSP:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" language="java" %>
<html>
<head>
<jsp:include page="../partialviews/globaheader.jsp" >
<jsp:param name="title" value="Teams"/>
</jsp:include>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<jsp:include page="../partialviews/menu.jsp"/>
<h3>Teams</h3>
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Short Name</th>
</tr>
</thead>
<tbody>
<c:forEach items="${teams}" var="team">
<tr>
<td><img class="smallBadge" src="/static/images/${team.getEncodedCrestUrl()}"/></td>
<c:set var="url" value="${team.getTeamNameUrlFriendly()}-${team.id}" scope="request"/>
<td><a href="${pageContext.request.contextPath}/team/${url}">${team.name}</a></td>
<td>${team.shortName}</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
Контроллер:
@Transactional
@RequestMapping(value = "/team/{id}", method = RequestMethod.GET)
public String getBttsTips(@PathVariable final String id, final Model model) throws UnsupportedEncodingException {
final int teamId = Integer.valueOf(id.substring(id.lastIndexOf("-")+1, id.length()));
final String teamName = id.substring(0, id.lastIndexOf("-"));
final Team team = teamService.findById(teamId);
if (team == null || !team.getTeamNameUrlFriendly().equals(teamName)){
return "error/404";
}
final List<Fixture> allFixtures = fixtureService.findAllFixturesByTeam(team);
final List<Fixture> homeFixtures = fixtureService.findHomeFixturesByTeam(team);
final List<Fixture> awayFixtures = fixtureService.findAwayFixturesByTeam(team);
model.addAttribute("allFixtures", allFixtures);
model.addAttribute("homeFixtures", homeFixtures);
model.addAttribute("awayFixtures", awayFixtures);
model.addAttribute("team", team);
return "team/teamDetail";
}
SecurityConfig:
@Override
protected void configure(HttpSecurity http) throws Exception {
final CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
http.addFilterBefore(filter,CsrfFilter.class);
Благодаря
Обновление Я переключился на сервер Jetty и, похоже, работает нормально с этим. Хотя я хотел использовать Tomcat, я попытался изменить кодировку в Tomcat server.xml для соединителя, но даже это не сработало.
Final Update я должен был использовать URIEncoding="UTF-8" useBodyEncodingForURI="true"
в моей Tomcat server.xml. Без useBodyEncodingForURI="true"
это не сработало. Сообщение 5 здесь UTF-8 encoding in Spring MVC, problem with FORMs помогло мне.
позволяет 1-я попытка поставить это в головной части yourjsp файла: –
@Georgesvanhoutte да его уже там – DANNY1000000
Его maven Я использую – DANNY1000000