Ответ 1
Не зная вашего точного варианта использования (мне еще не разрешено добавлять комментарии для запроса, к сожалению), я стараюсь кратко рассказать о тех идеях, которые имею в виду. Все они предполагают, что вы используете Jackson для json-отображения и не менее Spring 3.1.
В SpringMVC отсутствует функция enableResponseBodyCaching, насколько мне известно.
Первая альтернатива: Использовать кеширование http, потому что кажется, что вы действительно хотите кэшировать весь ответ HTTP. Spring предлагает прямой путь глобальной конфигурации:
<mvc:interceptors>
<bean id="webContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<property name="cacheSeconds" value="0"/>
<property name="useExpiresHeader" value="true"/>
<property name="useCacheControlHeader" value="true"/>
<property name="useCacheControlNoStore" value="true"/>
</bean>
</mvc:interceptors>
Если вы хотите управлять этим контроллером, наследуйте от Spring AbstractController и установите свойство cacheSeconds в соответствии с javaDoc.
Истинная мощь кэширования http поставляется с прокси-сервером http перед вашим сервером, конечно.
Вторая идея: Внедрите свой собственный подкласс MappingJackson2HttpMessageConverter. В writeInternal()
вы можете добавить некоторую логику, которая обращается к кешу, чтобы получить уже сопоставленную версию вместо сопоставления входного объекта. Этот подход означает, что вы ударите свои службы, чтобы получить java-объект за потоком Json. Если это хорошо для вас, потому что в какой-то момент есть кеширование, этот подход стоит попробовать imho.
Третья идея: Сделайте собственное сопоставление json в специализированной службе обертки, которая предоставляет сырые строки/потоки json. Вы можете легко вводить картограф Jackson (имя класса ObjectMapper) и получать полный контроль над отображением. Аннотирование этой службы позволяет вам кэшировать результаты. В вашем контроллере вы предоставляете только ResponseEntity соответствующего типа, который вы хотите использовать (String или некоторый поток). Это даже предотвратит более глубокий доступ к сервису, если будет присутствовать полученный в кэше результат.
Изменить: возможно, MappingJackson2JsonView также может оказаться полезным. Честно говоря, я никогда не работал с ним, поэтому я не могу сказать что-то о его использовании.
Надеюсь, что это помогает и/или дает вдохновение! Приветствия