2016-07-30 5 views
1

Ich habe viele Beiträge zu diesem Thema durchgesehen, aber immer noch keine Lösung gefunden.Java, Spring, JSP Codierung

Wenn ich Daten (URL) von meiner JSP an meinen Spring Controller sende, erscheint es als 'fc-bayern-münchen-5'. Der Umlaut ist auf diese Weise codiert, aber ich habe versucht, sicherzustellen, dass meine App die UTF-8-Codierung verwendet, die anscheinend nicht funktioniert.

Die URL in Firefox zeigt als http://localhost:8081/team/fc-bayern-münchen-5 und wenn an anderer Stelle eingefügt zeigt, wie http://localhost:8081/team/fc-bayern-m%C3%BCnchen-5 die ich denke, ist für UTF-8 erwartet.

Ich habe versucht mit URLDecoder.decode(url.getBytes(), "UTF-8"), aber das hat auch nicht funktioniert.

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> 

Controller:

@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); 

Dank

Update Ich wechselte zu einem Jetty-Server und es scheint damit gut zu funktionieren. Obwohl ich Tomcat verwenden wollte, hatte ich versucht, die Codierung in der Tomcat server.xml für den Connector zu ändern, aber selbst das hat nicht funktioniert.

Schluss aktualisieren Ich hatte URIEncoding="UTF-8" useBodyEncodingForURI="true" in meinem Tomcat server.xml zu verwenden. Ohne die useBodyEncodingForURI="true" würde es nicht funktionieren. Beitrag 5 hier UTF-8 encoding in Spring MVC, problem with FORMs hat mir geholfen.

+0

lässt 1. Versuch diese von yourjsp Datei innerhalb des Kopfteils setzen:

+0

@Georgesvanhoutte seine ja schon – DANNY1000000

+0

Seine Maven benutze ich – DANNY1000000

Antwort

0

CharacterEncodingFilter funktioniert nur auf POST request.So Sie Ihre Daten per Post statt get.If senden müssen Sie halten in get, die folgende Methode, die Sie ausprobieren können:

  1. bearbeiten server.xml in tomcat conf Ordner, setzen Sie ein Attribut URIEcoding="utf-8" in Connector-Element.
  2. convert url von new String(url.getBytes("iso-8859-1"),"utf-8")

Viel Glück.

+0

Danke, ich habe es geschafft, aber ich musste diese Zeile in die server.xml hinzufügen URIEncoding = "UTF-8" useBodyEncodingForURI = "true". Ohne das useBodyEncodingForURI-Attribut würde es nicht funktionieren. – DANNY1000000