2016-07-30 4 views
1

Я просмотрел много сообщений на эту тему, но все еще не нашел решения.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 помогло мне.

+0

позволяет 1-я попытка поставить это в головной части yourjsp файла:

+0

@Georgesvanhoutte да его уже там – DANNY1000000

+0

Его maven Я использую – DANNY1000000

ответ

0

CharacterEncodingFilter работает только на POST request.So вам необходимо отправить данные по почте вместо get.If вы держите в ГЭТ, следующий метод, вы можете попробовать:

  1. Редактировать server.xml в TOMCAT конф папку, поместите атрибут URIEcoding="utf-8" в элемент Коннектор.
  2. преобразования URL с помощью new String(url.getBytes("iso-8859-1"),"utf-8")

Удачи.

+0

Спасибо, мне удалось это сделать, но мне пришлось добавить эту строку в server.xml URIEncoding = "UTF-8" useBodyEncodingForURI = "true". Без использования атрибута BodyEncodingForURI это не сработает. – DANNY1000000