Конвертеры сообщений требовательны к заголовку Accept, и они должны быть такими, поскольку они применяются ко всем обработчикам, помеченным @ResponseBody
.
. Есть несколько способов обойти это:
Вариант 1: Расширьте BufferedImageHttpMessageConverter, чтобы обрабатывать также */*
, ПРИМЕЧАНИЕ: это может иметь непредвиденные последствия, если позже вы добавите другие конвертеры сообщений, так как неожиданно обработчики, для которых вы хотите создать JSON, вместо этого начнут создавать изображения.
public class ExtendedBufferedImageHttpMessageConverter extends BufferedImageHttpMessageConverter {
@Override
public boolean canWrite(Class<?> clazz, MediaType mediaType) {
if (mediaType.equals(MediaType.ALL)) {
return super.canWrite(clazz, MediaType.IMAGE_JPEG);
} else {
return super.canWrite(clazz, mediaType);
}
}
Затем используйте это вместо обычного BufferedImageHttpMessageConverter в вашей весенней конфигурации.
Вариант 2: создайте фильтр или перехватчик, который применяется к вашим запросам изображений, и оберните запрос таким образомзаголовок Accept
выглядит как image/jpeg
вместо */*
.Это «обманет» мысль о том, что клиент принимает jpeg и запускает BufferedImageHttpMessageConverter.