3

json と xml の両方をサポートするために、コントローラーに 2 つのメソッドがあるとします。

@RequestMapping(value = "/get/response.json", method = RequestMethod.GET)
@Cacheable(JSON_CACHE)
public @ResponseBody JSONResponse getJsonResponse(){
    return responseService.getJsonResponse();
}
@RequestMapping(value = "/get/response.xml", method = RequestMethod.GET)
@Cacheable(XML_CACHE)
public  @ResponseBody XMLResponse getXmlResponse(){
    return responseService.getXmlResponse();
}

そして、オブジェクトを適切な応答にマーシャリングする 2 つのメッセージ コンバーター。

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="messageConverters">
        <list>
            <ref bean="jsonConverter"/>
            <ref bean="xmlConverter" />
        </list>
    </property>
</bean>

問題は、Spring 3.1 では、メソッドに の注釈が付けられていても@Cachable、すべての呼び出しに対して依然としてマーシャラーを呼び出すことです。マーシャリングの前にオブジェクトの状態をキャッシュします。ここではパフォーマンスが重要であり、マーシャリングにはコストがかかりすぎるため、これは受け入れられません。そのような場合、Spring が最終的な応答をキャッシュすることを期待していました。ここで何か間違ったことをしていますか?

4

1 に答える 1

1

この問題を回避するには、ehcache Web キャッシングを使用できます: http://www.ehcache.org/documentation/user-guide/web-caching

web.xml にフィルターを追加するだけで機能し、HTTP 応答のキャッシュを提供します。

<filter>
    <filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
    <filter-class>net.sf.ehcache.constructs.web.filter.SimpleCachingHeadersPageCachingFilter
    </filter-class>
    <init-param>
        <param-name>suppressStackTrace</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>cacheName</param-name>
        <param-value>CachedPage2Cache</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>SimpleCachingHeadersPageCachingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
于 2012-06-15T17:13:14.693 に答える