簡體   English   中英

在 Spring Boot Mvc 中實現國際化時面臨的問題

[英]Facing Issue while implementing internationalization in Spring Boot Mvc

在訪問 url 時,我遇到了以下異常。

org.springframework.web.util.NestedServletException:請求處理失敗; nested exception is java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) org.springframework.web.servlet.FrameworkServlet.doGet (FrameworkServlet.java:898) javax.servlet.http.HttpServlet.service(HttpServlet.java:626) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) javax.servlet.http.HttpServlet.service (HttpServlet.java:733) org.apache.tomcat.ZBF56D570E62CDB5 73C86B18526296117Z.server.WsFilter.doFilter(WsFilter.java:53) org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) org.springframework.boot.web.servlet.support.ErrorPageFilter. forwardToErrorPage(ErrorPageFilter.java:193) org.springframework.boot.web.servlet.support.ErrorPageFilter.handleException(ErrorPageFilt er.java:178) org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:145) org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66 ) org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) org.springframework.boot.web. servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201 ) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) 根本原因

java.lang.UnsupportedOperationException: Cannot change HTTP accept header - use a different locale resolution strategy org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver.setLocale(AcceptHeaderLocaleResolver.java:142) org.springframework.web.servlet.i18n.LocaleChangeInterceptor. preHandle(LocaleChangeInterceptor.java:154) org.springframework.web.servlet.HandlerExecutionChain.applyPreHandle(HandlerExecutionChain.java:141) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1035) org.springframework.web. servlet.DispatcherServlet.doService(DispatcherServlet.Z93F725A07423FE1C889F448B33D21F46 Z:943) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) javax.servlet.http.HttpServlet.service( HttpServlet.java:626) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) javax.servlet.http.HttpServlet.service(HttpServlet.java:733) org.apache.tomcat.websocket.server. WsFilter.doFilter(WsFilter.java:53) org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.Z93F725 A07423FE1C889F448B33D21F46Z:100) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:103) org.springframework.web.filter.OncePerRequestFilter. doFilter(OncePerRequestFilter.java:103) org.springframework.boot.web.servlet.support.ErrorPageFilter.forwardToErrorPage(ErrorPageFilter.java:193) org.springframework.boot.web.servlet.support.ErrorPageFilter.handleException(ErrorPageFilter.java: 178) org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:145) org.springframework。 boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66) org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:103) org.springframework.web.filter. OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:121) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
我的配置 Class 如下所示:

package com.spring.mvc.messenger.config;

import java.util.Locale;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
public class MessengerConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/files/**").addResourceLocations("/WEB-INF/pdf/");
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getLocaleChangeInterceptor());
    }

    @Bean
    public LocaleChangeInterceptor getLocaleChangeInterceptor() {
        LocaleChangeInterceptor localChangeInterceptor = new LocaleChangeInterceptor();
        localChangeInterceptor.setParamName("lang");
        return localChangeInterceptor;
    }

    @Bean
    public ViewResolver getViewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        resolver.setOrder(0);
        return resolver;
    }

    @Bean
    public LocaleResolver getLocaleResolver() {
        SessionLocaleResolver localeResolver = new SessionLocaleResolver();
        localeResolver.setDefaultLocale(new Locale("en", "US"));
        return localeResolver;
    }

}

我的 message.properties 文件有以下詳細信息:

#labels
name=Name

#button
save.changes=Save Changes

我的 message_es.properties 文件具有以下詳細信息:

#labels
name=Nombre   

#button
save.changes=Guardar cambios

我的 Jsp 文件是

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

<!DOCTYPE html>

<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <h1>Welcome Home Jsp</h1>
    <spring:message code="name" />
</body>
</html>

我的 Controller Class

package com.spring.mvc.messenger.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/")
public class MessengerController {

    @GetMapping
    public ModelAndView getHomePage(Model model) {
        return new ModelAndView("WelcomeHome");
    }

    @GetMapping(value = "/home")
    public ModelAndView homePage(Model model) {
        return new ModelAndView("WelcomeHome");
    }

}

我的應用程序類是

package com.spring.mvc.messenger;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
public class MessengerApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(MessengerApplication.class, args);
    }

}

誰能幫我解決這個問題。我嘗試過使用不同的語言環境。 但仍然有類似的反應

有時錯誤可能與未添加注釋“@EnableWebMvc”有關

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM