私は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);
に追加してみました。助言がありますか?私は逃げた
私が見つけている共通点は、これが発生しているページがスプリング「フォワード」アクションの結果であるということです。 – Marc