La mia applicazione MVC primavera ha un unico ContentNegotiatingViewResolver che definisce JSONView per il rendering resonses JSON:avanti ad una pagina html statico dal controller
<mvc:annotation-driven/>
<context:component-scan base-package="world.domination.test"/>
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="mediaTypes">
<map>
<entry key="json" value="application/json"/>
</map>
</property>
<property name="defaultViews">
<list>
<bean class="com.secondmarket.connector.springmvc.MappingJacksonJsonViewEx"/>
</list>
</property>
</bean>
L'intera applicazione si siede sulla radice url "myapp". Tutto funziona come ho bisogno.
La prima domanda è: come restituire una pagina html statica quando si accede a un determinato URL? Diciamo, quando accedo a Spring uri/myapp/test, vorrei rendere una pagina html /TestStuff.html che risiede nella cartella webapp di root.
sono andato avanti e ho scritto un semplice controllo:
@Controller
@RequestMapping("test")
public class TestConnector {
@Autowired
private RestTemplate tpl;
@RequestMapping(method = RequestMethod.GET)
public String get() {
return "/TestStuff.html";
}
@RequestMapping(method = RequestMethod.POST)
public String post(@RequestParam("url") String url, @RequestParam("data") String data) {
return tpl.postForObject(url, data, String.class, new HashMap<String, Object>());
}
}
Il metodo get() dovrebbe dire a primavera per rendere una TestStuff.html, ma invece ho un errore che dice che la vista con nome "/TestStuff.html" mancante.
La seconda domanda è come evitare l'estensione dell'URL. Nell'esempio quando uso /myapp/test anziché /myapp/test.html mio ContentNegotiatingViewResolver utilizza una vista json che rende {} (parentesi graffe vuote)
Qualsiasi puntatori sono molto apprezzati.
Dalla configurazione di ContentNegotiatingViewResolver' non riesco a capire cosa stai cercando di ottenere. Questo risolutore è applicabile quando la stessa risorsa può essere resa in diverse rappresentazioni. Se alcune risorse sono renderizzate in JSON, mentre altre sono HTML, è necessaria un'altra configurazione di resolver. – axtavt