使用Spring MVC创建Restful API
目录
最近刚好把一个前端模块写完,Angular1.5 component+TypeScript,比较简单,花了一个spring的三天做完,又遇到了身体上的不适,就索性看起java来。
正好之前改过java代码,一不做,二不休,直接撸起spring mvc,尝试写一个类似于.NET MVC那样的简单的api来。
从零开始^_^, 遇到一些配置上的坑,记录一下以供瞻仰。
多图超长预警…当然没上上篇博文那个AngularJS1实战那么长。。。
注意,我这里的是 Win7x64 环境。
-
1.安装IntelliJ IDEA
-
2.创建基于Spring MVC的项目
-
3.配置tomcat本地服务器
-
4.使用模板
-
5.运行
-
6.定义model和controller
-
7.406错误
-
8.配置mvc-dispatcher-servlet.xml
-
9.spring mvc4关于pom.xml配置
-
10.spring mvc3关于pom.xml配置
-
11.tomcat配置
-
12.参考资料
1.安装IntelliJ IDEA
出门左转,额,不,访问 官网 ,如果不会安装,请自己普及知识。
社区版似乎不带tomcat,当然可以自己下,然后配置到环境变量即可。我选择了企业版,试用30天,本来没打算会的。
2.创建基于Spring MVC的项目
File > New > Projec 在新开的选择New Project中选择项目模板:
选择Spring > Spring MVC
Next 不需要模板
Next 输入你要命名的项目名称和路径
Finish 等库下载完成
3.配置tomcat本地服务器
企业版的IDEA带了tomcat,当然你依然可以下载一个tomcat到某个文件夹设置一下。
新建本地tomcat配置
可以自己命名改端口:
切换到Deployment tab ,重点是这里的配置
选择 Artifact
可以看到部署是打war包了。
Apply > OK
点击 |> 开始运行刚才创建的demo
可以看到状态栏目在make包,然而在报错。你需要加代码来完成了。
4.使用模板
在第二步创建基于Spring MVC的项目
,假设我们使用模板,看下面截图:
Next下一步, 发现tomcat已经被配置好了,这样就不用浪费时间配置tomcat了。
5.运行
点击 |> run项目
demo已经打开了 http://localhost:8080/ ,你可以通过修改tomcat配置来指定端口,
6.定义model和controller
好了,我们不用管自带的hello world
页面了,我们要的效果,请求某接口,返回json数据。
在 com.springapp.mvc 下创建controller
和model
文件夹,idea不能创建,就到项目所在的文件夹创建,实际这个路径是 SpringMVCDemo\src\main\java\com\springapp\mvc
在对应的文件夹中创建controller文件和model文件
我们定义一个People
类的model层,有name,age和children是它们的属性和内部方法(这一点实际上就是C#三层架构的model层)
People.java
package com.springapp.mvc.model;
/**
* Created by flyher on 2017/11/9.
*/
public class People {
String name;
Integer age;
String children[];
/**
* get
* @return
*/
public String getName(){
return name;
}
public Integer getAge(){
return age;
}
public String[] getChildren(){
return children;
}
/**
* set
*/
public void setName(String name){
this.name=name;
}
public void setAge(Integer age){
this.age=age;
}
public void setChildren(String[] children){
this.children=children;
}
}
定义对应的controller层,引入model层(类比C#的引用和using命名空间):
PeopleController.java
package com.springapp.mvc.controller;
import org.springframework.stereotype.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.ResponseBody;
import com.springapp.mvc.model.People;
/**
* Created by flyher on 2017/11/9.
*/
@Controller
@RequestMapping("/people") //路由
public class PeopleController {
@RequestMapping(value = "{name}",method = RequestMethod.GET)
public @ResponseBody
com.springapp.mvc.model.People getPeople(@PathVariable String name){
com.springapp.mvc.model.People people=new com.springapp.mvc.model.People();
people.setName(name);
people.setAge(99);
people.setChildren(new String[]{"lucy","jack"});
return people;
}
}
7.406错误
启动,访问 http://localhost:8080/people/test ,报406错。
关于这个406错误,网上有各种说法,什么 get/set,我们这里类已经有,还有….百度搜出来的千篇一律的答案,抄来抄去。
8.配置mvc-dispatcher-servlet.xml
我们先不管上面的问题,先来修改一下需要的配置 SpringMVCDemo\src\main\webapp\WEB-INF
目录下的mvc-dispatcher-servlet.xml
.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
">
<context:component-scan base-package="com.springapp.mvc.controller"/>
<!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
<!--<property name="prefix" value="/WEB-INF/pages/"/>-->
<!--<property name="suffix" value=".jsp"/>-->
<!--</bean>-->
<!--提示no bound 可以 ctrl+enter解决-->
<mvc:annotation-driven />
</beans>
9.spring mvc4关于pom.xml配置
截止到当前项目中,最新版本的是spring version是4.1.1,
<properties>
<spring.version>4.1.1.RELEASE</spring.version>
<jackson.version>2.8.5</jackson.version>
</properties>
添加与spring mvc4匹配的转换json的包:
<!--4 Jackson JSON Mapper -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
完成后点击 |> run,访问:http://localhost:8080/people/test,我们可以看到不再是406报错,而是返回的json对象。
可见,406错误在这里是配置错误造成。
10.spring mvc3关于pom.xml配置
当然,如果你在这里使用的是spring mvc3,那么这儿的配置就要改改,用下面的配置替换上一步的:
<properties>
<spring.version>3.2.2.RELEASE</spring.version>
<jackson.version>1.9.10</jackson.version>
</properties>
添加与spring mvc3匹配的转换json的包:
<!--3 Jackson JSON Mapper -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson.version}</version>
</dependency>
11.tomcat配置
tomcat官网下载zip包或者按照文件,如果是安装文件,安装后会自动被添加到了环境变量,如果是下载的,解压缩包,然后在系统环境PATH
变量中添加。
可以在Edit Configurations
添加…
12.参考资料
本节源代码地址:SpringMVCDemo
本文更新历史:
2019-11-14: 修改链接错误,文字错误