Spring MVC AJAX y JSON usando vista personalizada del resolver, y vista personalizada
-
30-09-2019 - |
Pregunta
vista personalizada:
public class MyView extends AbstractView {
.... awesome stuff ...
}
controlador:
@RequestMapping(value="mylocation")
public ModelAndView dosomething() {
...
modelAndView.setView( new MyView() );
return modelAndView;
}
Por alguna razón esto no funciona ... El único punto de vista de resolución que tengo es la siguiente:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/"
p:suffix=".jsp" >
<property name="exposedContextBeanNames">
<list>
<value>spEnv</value>
</list>
</property>
</bean>
No hace este código de trabajo, ya que está tratando de crear un poco de vista JSP basa en ... No estoy seguro, el camino de mi formulario de presentación; y hay obviamente hay vista JSP para ello, estoy esperando JSON para ser devuelto en realidad, pero por alguna razón esto no está funcionando, es simplemente tratando de remitir a algunos JSP, así que supongo que necesito especificar cómo manejar esto en mi XML ... pero he visto alrededor de 1000 maneras diferentes que la gente vuelve JSON, y todos ellos son muy confuso para mí, sólo estoy buscando la manera más simple, por lo que puede tomar desde hay
Edit: agregó una respuesta que es un comienzo bueno, pero le permite escribir ".json" después de cualquier URL y lo va a hacer algunas cosas realmente malas, si como el controlador no estoy esperando que, por lo que necesito de alguna manera tiene este punto de vista de resolución sólo se aplican a las direcciones URL seguras
Solución
Ok, finalmente, después de probar un millón de combinaciones
@RequestMapping(value = "/test/data")
public TestFormData dostuff() {
TestFormData data = new TestFormData();
data.setName("myname");
return data;
}
y entonces este
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver" p:order="1">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="defaultViews">
<list>
<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
</list>
</property>
</bean>
No entiendo realmente cómo puedo devolver un objeto a partir de aquí ...
Pero esta realidad, aunque es simple, y muy útil, no es aceptable porque entonces fui a alguna otra página de mi sitio web, y sólo hay que poner un arbitraria ".json" después de la URL y se inició una excepción que da la forma como los usuarios demasiada información respecto a mi solicitud, así que básicamente tiene que averiguar una forma que sólo tienen esta capacidad en ciertos controladores que están asegurados ...
¿Ideas?