这里介绍如何快速通过maven构建基于springmvc的rest风格api。
1、构建maven项目,这里没有必要构建web项目,可以构建一个非web的maven项目,配置上jetty的maven插件依赖,直接通过jetty插件来运行,加入spring-context-support,spring-webmvc,jackson-databind,javax.servlet-api,slf4j-log4j12(可选)依赖。
javax.servlet
javax.servlet-api
3.0.1
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-webmvc
${spring.version}
com.fasterxml.jackson.core
jackson-databind
2.8.6
org.slf4j
slf4j-log4j12
1.6.4
在build节点中,配置jetty插件依赖:
springmvc
org.mortbay.jetty
jetty-maven-plugin
8.1.16.v20140903
manual
/${project.build.finalName}
8080
配置好了,保存的时候,会下载很多jar包,网络正常情况下,不出一分钟。
2、编写AppConfig.java,该类的作用类似于我们在web项目中配置springmvc-servlet.xml 指定我们需要开启mvc注解,扫描controller控制器所在文件夹。
package com.xxx.web;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
@Configuration
@EnableWebMvc
@ComponentScan
public class AppConfig {}
AppInitializer.java,该类的作用相当于webapp中的web.xml文件,配置org.springframework.web.servlet.DispatchServlet。
package com.xxx.web;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration.Dynamic;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
public class AppInitializer implements WebApplicationInitializer {
private static final Logger log = LoggerFactory.getLogger(AppInitializer.class);
@Override
public void onStartup(ServletContext context) throws ServletException {
AnnotationConfigWebApplicationContext applicationContext =
new AnnotationConfigWebApplicationContext();
applicationContext.register(AppConfig.class);
DispatcherServlet dispatcherServlet = new DispatcherServlet(applicationContext);
Dynamic addServlet = context.addServlet("dispatcherServlet", dispatcherServlet);
addServlet.addMapping("/");
log.info("webapp initialized ok.");
}
}
编写一个实体类User,用来做数据传输。
package com.xxx.web.domain;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private boolean status=Boolean.TRUE;
...省略get,set,toString,hashCode,equals方法
}
User类中主要就三个属性id,name,status。
编写主要的UserController.java
package com.xxx.web.controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.xxx.web.domain.User;
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(value="/{id}",method=RequestMethod.GET)
public User get(@PathVariable("id") Integer id){
User user = new User(id,"springmvc-restful");
return user;
}
}
就这样,所有的代码就编写完毕,如果编译没有报错的话,我们可以进行测试了。
3、在命令行下进入项目所在目录,输入mvn jetty:run开始运行。
4、打开浏览器,在地址栏中输入地址:http://localhost:8080/springmvc/user/1,即可看到返回的json数据。
5、如果启动jetty没有问题,访问http://localhost:8080/springmvc/user/1出现404 :No mapping found for HTTP request with URI [/springmvc/user/1] in dispatcherServlet with name 'dispatcherServlet'的问题,检查一下AppConfig.java所在包是否在controller包的外面,如果不在controller包的外面,需要在@ComponentScan注解上加上@ComponentScan(basePackages={"com.xxx.web.controller"})这样的配置,指向controller文件夹所在的位置。
最后,启动jetty,发现我们所需要访问的uri出现在启动日志中,如下图所示,说明我们的配置生效了。
至此,基于springmvc构建的Rest风格应用就完成了。