Una vez que moví mi aplicación de prueba a una aplicación productiva (?) Y comencé a probar en Tomcat, mis servicios REST basados en Spring 3.1 han dejado de funcionar. Aunque se muestra el índice predeterminado.jsp, no se puede acceder a mi aplicación (http: // myhost: myport/test-webapp/myrestservice) y obtengo el recurso solicitado (/ test-webapp/myrestservice) no está disponible.Spring 3.1 REST con JSON: no funciona
Esto es lo que hice:
controlador:
package com.test.webapp.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.test.webap.entity.Account;
@Controller
@RequestMapping("/myrestservice")
public class AccountController{
@RequestMapping(method = RequestMethod.GET, produces="application/json")
@ResponseBody
public Account getEntity() {
// ... <simplified>
return new Account(//...);
}
}
configuración de Despacho Servlet:
package com.test.webapp.web;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
import com.test.webapp.config.AppConfig;
public class AppInit implements WebApplicationInitializer {
private static final String DISPATCHER_SERVLET_NAME = "dispatcher";
public void onStartup(ServletContext container) throws ServletException {
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(AppConfig.class);
// Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(dispatcherContext));
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet(
DISPATCHER_SERVLET_NAME, new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
clase de configuración:
package com.test.webapp.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = {"com.test.webapp.controller"})
public class AppConfig{
// Nothing here. Once I start using the beans, I will put them here
}
Y, web.xml tiene no mucho en it:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Test Web App</display-name>
</web-app>
No hay nada aparte de esto en mi proyecto. ¿Me estoy perdiendo de algo? El viejo proyecto que estaba haciendo un poco más como registrar las solicitudes entrantes de JSON, etc. (que se borró ahora) funcionaba, pero ya no lo tengo :(Así que muchos blues de novatos. Ayúdenme aquí. Muchas gracias. !
actualización problema se ha resuelto. Compruebe la respuesta
Elimina el DOCTYPE, no es válido: le estás diciendo a la aplicación que es una aplicación versionada de Servlet 2.3 y 3.0. – Pidster
Me di cuenta inmediatamente después de publicar la respuesta :-) Gracias por el comentario. – user1323865