Как установить распознаваемые типы содержимого/MIME для ресурсов Spring Boot/MVC?

С помощью Spring MVC ResourceHandler легко обслуживать ресурсы.

Однако некоторые файлы, т. е. файлы .ico, не распознаются должным образом, они не получают правильный заголовок Content-Type. Кажется, этим занимается ResourceHttpRequestHandler :

protected MediaType getMediaType(Resource resource) {
    MediaType mediaType = null;
    String mimeType = getServletContext().getMimeType(resource.getFilename());
    if (StringUtils.hasText(mimeType)) {
        mediaType = MediaType.parseMediaType(mimeType);
    }
    if (jafPresent && (mediaType == null || MediaType.APPLICATION_OCTET_STREAM.equals(mediaType))) {
        MediaType jafMediaType = ActivationMediaTypeFactory.getMediaType(resource.getFilename());
        if (jafMediaType != null && !MediaType.APPLICATION_OCTET_STREAM.equals(jafMediaType)) {
            mediaType = jafMediaType;
        }
    }
    return mediaType;
}

Итак, как настроить распознаваемые расширения файлов/типы MIME в Spring Boot 1.2? (как для Tomcat, так и для Undertow)


person Hendy Irawan    schedule 27.12.2014    source источник


Ответы (1)


CustomizableEmbeddedServletContainerFactory имеет метод установки типов mime. Вы можете получить обратный вызов, предоставив bean-компонент типа EmbeddedServletContainerCustomizer.

person Dave Syer    schedule 27.12.2014
comment
Однако это не работает, когда приложение развернуто как war в отдельном контейнере сервлетов. Затем вы должны настроить контейнер, но я пытаюсь найти решение, которое не требует настройки всех экземпляров сервера. Любые идеи о том, как справиться с этим только в Spring Boot? - person rzymek; 06.05.2016
comment
Вероятно, это то, что вы можете настроить в контейнере (например, у Tomcat есть файл web.xml, который создает сопоставления по умолчанию для всех приложений). - person Dave Syer; 06.05.2016