Mambo
5k
2021-02-09 23:30:43
1
522

스프링 부트에서 모든 메시지 코드 가져오기


스프링 부트가 자동으로 구성하는 ResourceBundleMessageSource는 메시지 코드를 가져올 수 있는 기능을 제공하지 않습니다. 반면에 ReloadableResourceBundleMessageSource에는 특정 로케일을 기준으로 메시지 프로퍼티를 가져올 수 있는 함수가 존재합니다. 이를 활용하여 모든 메시지 코드를 가져올 수 있습니다.


스프링 부트에서 모든 메시지 코드 가져오기


메시지 코드 정보가 애플리케이션 구동 시점에 결정된다는 것이 보장된다면 로케일별 메시지 코드 정보를 미리 캐시하는 것이 좋습니다.
0
  • 댓글 1

  • visualkhh
    4k
    2021-02-10 16:22:48 작성 2021-02-10 16:23:30 수정됨
    @Slf4j
    public class CustomReloadableResourceBundleMessageSource extends ReloadableResourceBundleMessageSource {


    public CustomReloadableResourceBundleMessageSource() {
    }

    public String getMessage(String code, String defaultValue) throws NoSuchMessageException{
    return getMessage(code,null,defaultValue,LocaleContextHolder.getLocale());
    }
    public String getMessage(String code) throws NoSuchMessageException{
    return getMessage(code,null,LocaleContextHolder.getLocale());
    }
    public String getMessage(String code, Object[] args) throws NoSuchMessageException{
    return getMessage(code,args,LocaleContextHolder.getLocale());
    }
    public Map<String, String> getPropertiesMap() {
    return getPropertiesMap(LocaleContextHolder.getLocale());
    }
    public Map<String, String> getPropertiesMap(Locale locale) {
    Map<String, String> altLabels = new HashMap<String, String>();

    PropertiesHolder propertiesHolder = getMergedProperties(locale);
    Properties properties = propertiesHolder.getProperties();

    for (Object key : properties.keySet()) {
    altLabels.put((String) key, (String) properties.get(key));
    }

    return altLabels;
    }
    }
    상속받아서 저도 사용하고있습니다. ^^편해요
  • 로그인을 하시면 댓글을 등록할 수 있습니다.