站点图标 久久日记本

使用Spring MVC创建Restful API

使用Spring MVC创建Restful API

目录

最近刚好把一个前端模块写完,Angular1.5 component+TypeScript,比较简单,花了一个spring的三天做完,又遇到了身体上的不适,就索性看起java来。

正好之前改过java代码,一不做,二不休,直接撸起spring mvc,尝试写一个类似于.NET MVC那样的简单的api来。

从零开始^_^, 遇到一些配置上的坑,记录一下以供瞻仰。

多图超长预警...当然没上上篇博文那个AngularJS1实战那么长。。。

注意,我这里的是 Win7x64 环境。

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 下创建controllermodel 文件夹,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

spring mvc实现Restful返回json格式数据

Restful风格API接口开发springMVC篇

Getter & Setter: 使用还是废弃

Spring MVC 4 - 返回JSON

本文更新历史:

2019-11-14: 修改链接错误,文字错误

退出移动版