使用 spring 引导将请求映射到 RestController
Mapping requests to RestController with spring boot
大家晚上好,
我最近一直在学习 spring 引导,我正在尝试使用 spring rest 和 spring 引导开发一个简单的 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
,您的 web.xml
用于 2.5 版本的 Servlet API,而不是 3.0。这会禁用 Servlet 3.0 的 ServletContainerInitializer
支持。这有效地禁用了您的 ApplicationContext
class 的拾取。而只是删除它。
接下来是您的依赖项,Spring Boot 已经自动管理这些依赖项,并确保您获得所需的框架版本。关于依赖项 Spring Boot 提供了所谓的启动项目(您使用的),它已经引入了不同的依赖项,因此无需再次添加它们。此外 Spring Boot 已经为不同的库设置了依赖项。
修复你的 pom
- 删除
<properties>
部分
- 清除依赖项。
你应该有以下 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>
<dependencies>
<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>
</dependency>
<!-- Hibernate core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<!-- Spring ORM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<!-- Commons DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
</dependency>
<!-- MySql connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
里面有很多不需要的东西,SpringBoot 已经管理版本和正确的依赖关系。
现在最后一部分与您的 ApplicationContext
class 有关,它不是完整的 Spring 启动 class。没有启用自动配置。添加 @EnableAutoConfiguration
或简单地将 @Configuration
替换为 @SpringBootApplication
。 Spring 引导将自动启用事务,因此您可以删除 @EnableTransactionManagement
并且 application.properties
也已经加载,因此 @PropertySource
也应该去。
另外从 @ComponentScan
判断 ApplicationContext
在一些根包中。这也意味着可以去也。只留下 @SpringBootApplication
注释。
@SpringBootApplication
public class ApplicationContext 扩展 SpringBootServletInitializer { ... }
另外提示将来使用 Spring Initializr 设置您的项目。只需点击几下,您就可以获得正确的 pom 和预配置 Application
class.
大家晚上好,
我最近一直在学习 spring 引导,我正在尝试使用 spring rest 和 spring 引导开发一个简单的 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
,您的 web.xml
用于 2.5 版本的 Servlet API,而不是 3.0。这会禁用 Servlet 3.0 的 ServletContainerInitializer
支持。这有效地禁用了您的 ApplicationContext
class 的拾取。而只是删除它。
接下来是您的依赖项,Spring Boot 已经自动管理这些依赖项,并确保您获得所需的框架版本。关于依赖项 Spring Boot 提供了所谓的启动项目(您使用的),它已经引入了不同的依赖项,因此无需再次添加它们。此外 Spring Boot 已经为不同的库设置了依赖项。
修复你的 pom
- 删除
<properties>
部分 - 清除依赖项。
你应该有以下 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>
<dependencies>
<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>
</dependency>
<!-- Hibernate core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
</dependency>
<!-- Spring ORM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<!-- Commons DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
</dependency>
<!-- MySql connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
里面有很多不需要的东西,SpringBoot 已经管理版本和正确的依赖关系。
现在最后一部分与您的 ApplicationContext
class 有关,它不是完整的 Spring 启动 class。没有启用自动配置。添加 @EnableAutoConfiguration
或简单地将 @Configuration
替换为 @SpringBootApplication
。 Spring 引导将自动启用事务,因此您可以删除 @EnableTransactionManagement
并且 application.properties
也已经加载,因此 @PropertySource
也应该去。
另外从 @ComponentScan
判断 ApplicationContext
在一些根包中。这也意味着可以去也。只留下 @SpringBootApplication
注释。
@SpringBootApplication public class ApplicationContext 扩展 SpringBootServletInitializer { ... }
另外提示将来使用 Spring Initializr 设置您的项目。只需点击几下,您就可以获得正确的 pom 和预配置 Application
class.