在Spring中没有调用Rest控制器

时间:2017-09-06 08:53:32

标签: java spring rest spring-mvc

我正在使用Spring Rest控制器进行Restful调用。我有JAR的Spring 4.3.x版本。当我自己运行项目时,不会调用index.jsp。我没有在xml中配置任何东西,因为我正在使用注释方法。这是我的档案。

P.S:我没有使用Maven,它是一个动态的Web项目,所有Spring JAR(Webmvc,web,core,context,beans)都被添加到构建路径中。

我已关注http://viralpatel.net/blogs/spring-4-mvc-rest-example-json/

的AppConfig

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "net.ifg.spring")
public class AppConfig {

}

AppInitializer

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class[] getRootConfigClasses() {
    return new Class[] { AppConfig.class };
}

@Override
protected Class[] getServletConfigClasses() {
    return null;
}

@Override
protected String[] getServletMappings() {
    return new String[] { "/" };
}

}

CustomerDAO

public class CustomerDAO {

// Dummy database. Initialize with some dummy values.
private static List<Customer> customers;
{
    customers = new ArrayList();
    // Add customers here
}


public List list() {
    return customers;
}


}

CustomerRestController

@RestController
public class CustomerRestController {


@Autowired
private CustomerDAO customerDAO;


@GetMapping("/customers")
public List getCustomers() {
    return customerDAO.list();
}

}

Web.xml中

 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>IFG</display-name>
<welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
</web-app>

为什么它无法点击网址http://localhost:8080/IFG/customers? AppInitializer文件应该存在问题。

任何想法都将不胜感激。

6 个答案:

答案 0 :(得分:1)

您必须在请求映射中指定IFG。根据您的映射,当前链接应为http://localhost:8080/customers。添加指定路径的@RequestMapping注释。

@RestController
@RequestMapping("/IFG")
public class CustomerRestController

答案 1 :(得分:0)

要使其有效,您应该添加:

@RestController
@RequestMapping("/IFG")

并检查端口号:8080(可能是9080或其他)

答案 2 :(得分:0)

@RestController
@RequestMapping("/IFG")
public class CustomerRestController {


@Autowired
private CustomerDAO customerDAO;


@GetMapping("/customers")
public List getCustomers() {
    return customerDAO.list();
}

}

现在点击下面的网址:

  

本地主机:端口/ IFG /客户

答案 3 :(得分:0)

http://localhost:8080之后,您必须在调用控制器之前提供您的应用名称。假设您的应用名称为myApp,因此网址应为:

http://localhost:8080/myApp/customers

如果您在问题中使用控制器,如果您已根据建议的其他答案添加到控制器@RequestMapping("/IFG"),则必须将网址更改为:

http://localhost:8080/myApp/IFG/customers

修改

我在AppInitializer班级中看到您从getServletConfigClasses()返回null。我相信AppConfig.class应该返回那里。

@Override
protected Class[] getServletConfigClasses() {
    return new Class[] { AppConfig.class };
}

答案 4 :(得分:0)

只需尝试访问$qty.val(currentVal + 1).trigger('change'); (不带/ IFG),只需在我的tomcat上本地复制该项目,它就能正常运行,而无需运行http://localhost:8080/customers

您在web.xml mvn tomcat7:run中的设置不是要访问的应用程序上下文路径。

来自文档:

  

显示名称

     

可选的display-name元素指定Web   应用程序显示名称,GUI可以显示的短名称   工具。

答案 5 :(得分:0)

刚检查它是由于javax.servlet.ServletException:无法实例化WebApplicationInitializer类。我通过添加commons-logging-1.2.jar,spring-aop,spring-expression jar来解决这个问题。至少我能够指出正确的方法。