【发布时间】:2016-06-27 05:53:32
【问题描述】:
大家晚上好,
我最近一直在学习spring boot,正在尝试使用spring rest和spring boot开发一个简单的restful应用程序。
所以我在 WildFly 应用程序服务器上部署应用程序,并使用编码的应用程序上下文配置。我的问题是应用程序正常启动,没有错误或错误,但是当尝试调用服务时没有任何反应,似乎请求没有映射到控制器。有人可以向我解释在这种情况下如何完成映射吗? 以下是一些看似有助于解决问题的代码:
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<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_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Restfull application</display-name>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener
</listener-class>
</listener>
<!-- Configure ContextLoaderListener to use AnnotationConfigWebApplicationContext
instead of the default XmlWebApplicationContext -->
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<!-- Configuration locations must consist of one or more comma- or space-delimited
fully-qualified @Configuration classes. Fully-qualified packages may also be
specified for component-scanning -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>configuration.ApplicationContext</param-value>
</context-param>
</web-app>
ApplicationContext.java:
@Configuration
@ComponentScan({"DAL","domains","services","controllers","configuration"})
@EnableTransactionManagement
@PropertySource(value = { "classpath:application.properties" })
public class ApplicationContext extends SpringBootServletInitializer {
@Autowired
Environment environment;
private static Class<ApplicationContext> applicationClass = ApplicationContext.class;
public static void main(String[] args) {
SpringApplication.run(applicationClass, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(applicationClass);
}
@Bean(name = "datasource")
public BasicDataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(environment.getProperty("jdbc.driverClassName"));
dataSource.setUrl(environment.getProperty("jdbc.url"));
dataSource.setUsername(environment.getProperty("jdbc.username"));
dataSource.setPassword(environment.getProperty("jdbc.password"));
dataSource.setValidationQuery(environment.getProperty("validationQuery"));
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactoryBean() {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(this.dataSource());
sessionFactoryBean.setPackagesToScan("*");
Properties properties = new Properties();
properties.setProperty("hibernate.dialect",environment.getProperty("hibernate.dialect"));
properties.setProperty("hibernate.show_sql",environment.getProperty("hibernate.show_sql"));
properties.setProperty("hibernate.hbm2ddl.auto",environment.getProperty("hibernate.hbm2ddl.auto"));
sessionFactoryBean.setHibernateProperties(properties);
return sessionFactoryBean;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager transactionManager = new HibernateTransactionManager();
transactionManager.setSessionFactory(this.sessionFactoryBean().getObject());
return transactionManager;
}
@Bean
public GenericRepositoryImpl personRepo() {
GenericRepositoryImpl<Person,Integer> personRepo = new GenericRepositoryImpl<Person,Integer>();
return personRepo;
}
@Bean
public PersonServiceImpl personService() {
return new PersonServiceImpl();
}
}
ContactsController.java:
@RestController
@RequestMapping("/listAll")
public class ContactsController {
@Autowired
private IPersonService personService;
@RequestMapping(method = RequestMethod.GET)
public List<Person> getAllContacts() {
System.out.println("******** I'am here *********");
List<Person> contacts = personService.findAllContacts();
return contacts;
}
}
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>TP2ArchitecturesLogicielles</groupId>
<artifactId>Activite3RestfulWebService</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Activite3RestfulWebService Maven Webapp</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>http://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>http://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>http://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<properties>
<java.version>1.8</java.version>
<hibernate.version>4.1.0.Final</hibernate.version>
<spring.version>4.1.4.RELEASE</spring.version>
<mysql.version>5.1.5</mysql.version>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Hibernate dependencies -->
<!-- Hibernate validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Hibernate core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- Spring dependencies -->
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring ORM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Commons tools -->
<!-- Commons pool -->
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<!-- Commons DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- MySql connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
提前感谢您的帮助,抱歉过于冗长。
【问题讨论】:
-
删除 web.xml... 在您的
ApplicationClass中将@Configuration替换为@SpringBootApplication并删除@EnableTransactionManagement和@PropertySource注释。 -
什么都没有改变,仍然是相同的行为
-
您是否也更改了注释?
-
还有你在调用哪个网址?
-
当更改注释时,应用程序不再启动并抛出异常: java.lang.RuntimeException: java.lang.IllegalArgumentException: 无法实例化接口 org.springframework.context.ApplicationListener : org.springframework .boot.logging.ClasspathLoggingApplicationListener
标签: spring-boot wildfly spring-rest