2016-08-03 10 views
0

私はSpring MVC 4.1/Tomcat 8、Java 8に移行していますが、特定のページだけが完全に文字化けしてしまいました。これは、マイグレート前の状態では起こりませんでした。マイグレーションの一環として、テンプレートもコントローラーも変更されていません。この問題は、開発環境とテストサーバーの両方で発生します。ぼんやりしたページ出力Spring MVC

次のようにコントローラの設定は基本的に次のとおりです。

public abstract class AbstractContextSkillController extends BaseProfileController{ 

    public String skill(
      SearchProfileEntityVO vo, 
      ModelMap model, 
      NativeWebRequest request){ 

     [...] 

     return "/profile/frm_skills"; 
    } 

@Controller 
@RequestMapping("/*/??_??/account/user/profile/edit/skill") 
public class InContextSkillController extends AbstractContextSkillController { 

    @RequestMapping(method = RequestMethod.GET) 
    public String skill(
      ModelMap model, 
      NativeWebRequest request){ 

     if(myCondition) //if false => normal page output, if true => garbled 
      return "forward:" + URLUtils.getBasePath(request) + "/account/user/profile/edit/skill/med"; 

     SearchProfileEntityVO vo = new SearchProfileEntityVO(); 

     return super.skill(vo, model, request); 

    } 

@Controller 
@RequestMapping(value={"/*/??_??/account/user/profile/edit/skill"}) 
public class CustomInContextSkillController extends AbstractContextSkillController { 

    @RequestMapping(method = RequestMethod.GET, value="/med") 
    public String skill(
      ModelMap model, 
      NativeWebRequest request){ 

     SearchProfileEntityVO vo = new SearchProfileEntityVO(); 

     return super.skill(vo, model, request); // => garbled 

    } 

唯一の違いは、異なるエントリのようだとき、私はInContextSkillControllerと全く同じ内容を返すようにCustomInContextSkillControllerを変更し、私はまだ文字化けした出力を得ますポイント、私を驚かせる。

すべてのテンプレートはUTF-8です。純粋なページ出力を返し、潜在的な違いを排除するためにSitemeshを削除しました。 Sitemeshをアクティブにしておくと、このテンプレートを表すページの部分だけが文字化けした出力を生成します。 HELLO WORLDだけで新しいテンプレートを再実行すると、文字化けして返されます。

これは、転送が誤ってエンコードされていることを前提にして、さまざまなことを試しました。だから私はonStartupにそれを追加することによって、最初のように必ずcharacterencodingfilterを作ってみましたとも私はテンプレート言語としてFreemarkerのを使用

@Component 
@Order(10) 
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { 
protected void beforeSpringSecurityFilterChain(ServletContext servletContext){ 
    CharacterEncodingFilter characterEncoding = new CharacterEncodingFilter(); 

    FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter", characterEncoding); 
    encodingFilter.setInitParameter("encoding", "UTF-8"); 
    encodingFilter.setInitParameter("forceEncoding", "true"); 
    encodingFilter.addMappingForUrlPatterns(null, false, "/*"); 
    encodingFilter.setAsyncSupported(isAsyncSecuritySupported()); 

    super.beforeSpringSecurityFilterChain(servletContext); 


@Order(1) 
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{ 
@Override 
public void onStartup(ServletContext servletContext) throws ServletException { 

    CharacterEncodingFilter characterEncoding = new CharacterEncodingFilter(); 
    characterEncoding.setEncoding("UTF-8"); 
    characterEncoding.setForceEncoding(true); 

    registerServletFilter(servletContext, characterEncoding); 

    super.onStartup(servletContext); 

に追加してみました。助言がありますか?私は逃げた

+0

私が見つけている共通点は、これが発生しているページがスプリング「フォワード」アクションの結果であるということです。 – Marc

答えて

0

私の場合、原因はnet.sf.ehcache.constructs.web.filter.GzipFilterでした。 web.xmlからJavaConfigへの動作が変更されました。

+0

Java config gzip filterの同様の問題に直面しています。問題を解決したコードを投稿してください。 – Lucky

関連する問題