Excepción de reparto en la clase de negociación de contenido de la primavera 3.2
Desarrollamos una aplicación web Java estándar usando Spring MVC, y recientemente intentamos actualizar de 3.0.6 a 3.2.0. Casi todas nuestras respuestas de servlet son vistas JSP o Json, pero hay algunas que son solicitudes de pdf, con la extensión 'pdf'.
En Spring 3.0.6 tuvimos esta configuración, tomada de la documentación de Spring MVC.
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="pdf" value="application/pdf"/>
<entry key="html" value="text/html"/>
<entry key="json" value="application/json"/>
</map>
que funcionó bien, en combinación con un XMLViewResolver.
Después de actualizar a 3.2.0, hay un error:
Error creating bean with name' org.springframework.web.servlet.view.ContentNegotiatingViewResolver#0' defined in class path resource [dispatcher-test-servlet.xml]: Invocation of init method failed; nested exception is
java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.http.MediaType'
Después de investigar los documentos y algunos blogs, esta configuración parece funcionar:
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="contentNegotiationManager">
<bean class="org.springframework.web.accept.ContentNegotiationManager">
<constructor-arg>
<list>
<!-- These are evaluated in order -->
<!-- Is there a media type based on suffix? -->
<bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
<constructor-arg>
<map>
<entry key="html" value="text/html" />
<entry key="json" value="application/json" />
<entry key="pdf" value="application/pdf" />
</map>
</constructor-arg>
</bean>
<!-- Else use request header -->
<bean
class="org.springframework.web.accept.HeaderContentNegotiationStrategy">
</bean>
</list>
</constructor-arg>
</bean>
</property>
Pero, hemos intentado ejecutar el nuevo framework de prueba Spring MVC usando esta configuración, y obtuvimos la excepción ClassCast nuevamente, así que parece que el framework de prueba no está inicializando los beans de la misma manera que cuando se ejecuta la aplicación ... ¿Alguien tiene un ¿Explicación clara de cómo configurar el ContentNegotiatingViewResolver en Spring 3.2 de una manera robusta? Gracias
Ricardo