@SpringMVC
SpringMVC实现第一个RESTful接口
RESTful 个人理解总结
一.什么是RESTful 面向资源
简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。
先看REST是什么意思,英文Representational state transfer 表述性状态转移 其实就是对 资源 的表述性状态转移。
资源的地址 在web中就是URL (统一资源标识符)
资源是REST系统的核心概念。 所有的设计都是以资源为中心
围绕资源进行 添加,获取,修改,删除,以及对符合特定条件的资源进行列表操作 。针对资源设计接口
开发环境
- Eclipse Version: Photon Release (4.8.0)
- Tomcat 8.0
- Java jdk1.8
- 类库
commons-logging-1.2.jarcommons-logging-1.2.jar
fastjson-1.2.7.jar
spring-aop-4.2.0.RELEASE.jar
spring-beans-4.2.0.RELEASE.jar
spring-context-4.2.0.RELEASE.jar
spring-core-4.2.0.RELEASE.jar
spring-expression-4.2.0.RELEASE.jar
spring-web-4.2.0.RELEASE.jar
spring-webmvc-4.2.0.RELEASE.jar
步骤
1、新建Dynamic Web Project
2、把类库放到WEB-INF/lib下
3、WEB-INF下新建或编辑springmvc-config.xml
4、WEB-INF下新建或编辑web.xml
5、controller和domain类编写
springmvc-config.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<!-- spring可以自动去扫描base-pack下面的包或者子包下面的java文件,
如果扫描到有Spring的相关注解的类,则把这些类注册为Spring的bean -->
<context:component-scan base-package="controller"/>
<!-- 设置配置方案 -->
<mvc:annotation-driven>
<!-- 设置不使用默认的消息转换器 -->
<mvc:message-converters register-defaults="false">
<!-- 配置Spring的转换器 -->
<bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
<bean class="org.springframework.http.converter.xml.XmlAwareFormHttpMessageConverter"/>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>
<!-- 配置fastjson中实现HttpMessageConverter接口的转换器 -->
<bean id="fastJsonHttpMessageConverter"
class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<!-- 加入支持的媒体类型:返回contentType -->
<property name="supportedMediaTypes">
<list>
<!-- 这里顺序不能反,一定先写text/html,不然ie下会出现下载提示 -->
<value>text/html;charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 使用默认的Servlet来响应静态文件 -->
<mvc:default-servlet-handler/>
<!-- 视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix">
<value>/WEB-INF/content/</value>
</property>
<!-- 后缀 -->
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
注意:<context:component-scan base-package=“controller”/>包的名称
web.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<!-- 定义Spring MVC的前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 让Spring MVC的前端控制器拦截所有请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
BasketballController类代码
package controller;
import java.util.List;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
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 domain.Student;
@Controller
@RequestMapping("basketball") //请求的路径
public class BasketballController {
/**
* 直接返回字符串
* @param teamname
* @param request
* @return
*/
//请求的路径,方式
@RequestMapping(value = "v1.0/new/{teamname}", method = RequestMethod.GET)
@ResponseBody public String foo4(@PathVariable String teamname, HttpServletRequest request) {
//可以使用teamname获取url路径分隔
//获取请求的参数
String name = request.getParameter("name");
String age = request.getParameter("age");
Student student = new Student(name, age);
return "123456";
}
/**
* 直接返回对象,自动转化为JSON格式
* @param teamname
* @param request
* @return
*/
@RequestMapping(value = "v2.0/new/{teamname}", method = RequestMethod.GET)
@ResponseBody public Student foo5(@PathVariable String teamname, HttpServletRequest request) {
//可以使用teamname获取url路径分隔
//获取请求的参数
String name = request.getParameter("name");
String age = request.getParameter("age");
Student student = new Student(name, age);
return student;
}
/**
* 直接返回List,自动转化为JSON格式
* @param teamname
* @param request
* @return
*/
@RequestMapping(value = "v3.0/new/{teamname}", method = RequestMethod.GET)
@ResponseBody public List<Student> foo6(@PathVariable String teamname, HttpServletRequest request) {
//可以使用teamname获取url路径分隔
//获取请求的参数
String name = request.getParameter("name");
String age = request.getParameter("age");
Student student = new Student(name, age);
Student student1 = new Student(name + name, age + age);
List<Student> list = new ArrayList<Student>();
list.add(student);
list.add(student1);
return list;
}
}
Student类代码
package domain;
public class Student {
String name;
String age;
public Student(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
启动Tomcat
http://localhost:8080/myRestful/basketball/v1.0/new/teamname?name=chen&age=123
http://localhost:8080/myRestful/basketball/v2.0/new/teamname?name=chen&age=123
http://localhost:8080/myRestful/basketball/v3.0/new/teamname?name=chen&age=123
参考https://blog.csdn.net/CHENYUFENG1991/article/details/69055677