@artemfisher

Как заставить работать интернационализацию в ErrorResponse методах?

Добрый день!

В официальной документации https://docs.spring.io/spring-framework/reference/...
написано:
An ErrorResponse exposes message codes for "type", "title", and "detail", as well as message code arguments for the "detail" field. ResponseEntityExceptionHandler resolves these through a MessageSource and updates the corresponding ProblemDetail fields accordingly.


Приведите, пожалуйста, пример. Никак не могу заставить чтобы сообщения выводились из MessageSource.
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
devpav
@devpav
Full-Stack разработчик.
public static final String I18_BUNDLE_LOCATION = "language/messages";
    
@Bean
    public ResourceBundleMessageSource resourceBundleMessageSource() {
        final var source = new ResourceBundleMessageSource();
        {
            source.setBasename(I18_BUNDLE_LOCATION);
            source.setDefaultEncoding(StandardCharsets.UTF_8.name());
        }

        return source;
    }

66fb3970b8230342940738.png
@Slf4j
@Service
@RequiredArgsConstructor
public class LocaleI18Service implements LocaleService {

    private final ResourceBundleMessageSource messageSource;

    @Override
    public String getI18Message(final String i18Code) {
        return getMessage(i18Code, Map.of());
    }

    public String getI18Message(final String i18Code, final Map<String, String> args) {
        return getMessage(i18Code, args);
    }

    private String getMessage(final String i18Code, final Map<String, String> args) {
        if (Objects.isNull(i18Code)) {
            return null;
        }

        final var currentLocale = LocaleContextHolder.getLocale();

        final String template = messageSource.getMessage(i18Code, null, currentLocale);

        if (Objects.isNull(args) || args.isEmpty()) {
            return template;
        }

        return StringSubstitutor.replace(template, args, "{", "}");
    }
}


66fb3a32a3346675588143.png

public interface SystemException {

    /**
     * Get args for code
     *
     * @return args message
     */
    Map<String, String> getArgs();

    /**
     * Exception code
     *
     * @return i18 code
     */
    String getI18Code();

}


66fb3aa70b97e285459437.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы