栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringBoot读取资源文件

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringBoot读取资源文件

在Java项目中,资源文件一般都为 *.properties 文件(只能存储key-value格式的数据),SpringMVC中提供有MessageSource接口进行资源文件的读取,在SpringBoot中也支持同样的操作。

读取资源文件

在resources目录下新建i18n文件夹,在文件夹中新建message.properties文件:

title=SpringBoot开发框架
desc=官方网址: https://spring.io/projects/spring-boot

修改application.yml文件,指定资源文件的basename。

server:
  port: 8080
spring:
  messages:
    basename: i18n/message

在java对象中注入MessageSource,根据key来读取value值。

@RestController
@RequestMapping("/message/*")
public class MessageAction {
   private final MessageSource messageSource; // 资源文件处理类

   public MessageAction(MessageSource messageSource) {
       this.messageSource = messageSource;
   }

   @RequestMapping("/get")
   public Map getMessage() {
       String title = messageSource.getMessage("title", null, Locale.getDefault());
       String desc = messageSource.getMessage("desc", null, Locale.getDefault());
       Map map = new linkedHashMap<>();
       map.put("title", title);
       map.put("desc", desc);
       return map;
   }
}

访问http://localhost:8080/message/get

设置国际化

在i18n文件夹再定义两个文件,message_zh_CN.properties和message_en_US.properties:

# message_zh_CN.properties
title=SpringBoot开发框架
desc=官方网址: https://spring.io/projects/spring-boot
# message_en_US.properties
title=SpringBoot Development framework
desc=Official website: https://spring.io/projects/spring-boot

如果想要设置国际化,那么就不能使用默认的Locale,可以实现一个Locale解析器,通过传入字符串的方式指定Locale。

定义一个DefaultLocaleResolver,并在Spring容器中提供实例对象。

@Configuration
public class DefaultLocaleResolver implements LocaleResolver {
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        String loc = request.getParameter("loc"); // 取得请求参数
        if (!StringUtils.hasLength(loc)) {
            return Locale.getDefault(); // 设置默认Locale
        }
        String[] localeArray = loc.split("_");
        return new Locale(localeArray[0], localeArray[1]); // 采用传入的locale
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {}

    @Bean(name="localeResolver") // 指定LocaleResolver名称,否则可能不生效
    public LocaleResolver getLocaleResolver() {
        return new DefaultLocaleResolver();
    }
}

修改控制器,在方法参数里面接收Locale对象,该Locale对象正是采用DefaultLocaleResolver生成的。

@RequestMapping("/get")
public Map getMessage(Locale locale) {
    String title = messageSource.getMessage("title", null, locale);
    String desc = messageSource.getMessage("desc", null, locale);
    Map map = new linkedHashMap<>();
    map.put("title", title);
    map.put("desc", desc);
    return map;
}

此时输入http://localhost:8080/message/get?loc=zh_CN可以得到中文版本:

输入http://localhost:8080/message/get?loc=en_US则可以得到英文版本:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号