使用SpringMVC实现RESTful风格
SpringMVC
1、SpringMVC
是Spring体系的轻量级Web MVC框架,用于替代传统的J2EE Servlet,简化web应用开发
2、SpringMVC
的核心是Controller控制器,用于处理请求,产生响应
3、SpringMVC
基于Spring IOC容器运行,所有对象被IOC容器管理,提高了程序的健壮性与稳定性
- MVC是架构模式,不是设计模式
-
View:界面部分,和用户进行交互,比如通过界面查询结果,通过表单接收用户信息等
-
Model:数据,相当于Java中业务模式部分
-
Controller:中介,是MVC的核心,用于接收视图(View)中传入的数据,再根据数据调用后端业务逻辑(Model)得到结果,再通过控制器将后端结果返回视图中(优势:界面和后端Java业务逻辑有效解耦,提高程序可维护性)
RESTful
1、REST(Representational State Transfer,表述性状态传递)以URL表示要访问的资源
2、GET/POST/PUT/DELETE对应查询、新增、更新、删除操作
-
对于http请求,尤其是由浏览器发出的请求,由于浏览器不支持PUT/DELETE请求格式,通常使用GET进行查询操作,使用POST完成数据的新增、更新、删除操作
-
对于同一个url,如果采用了不同的请求方式,那么对应的服务器操作和返回结果都是不同的
3、RESTful风格指响应只返回数据,通常是以JSON形式体现
例子
引入依赖 pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.54</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>compile</scope>
</dependency>
配置文件 web.xml
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
配置文件 applicationContext.xml
<beans ...>
<!-- 配置扫描的包 -->
<context:component-scan base-package="..."/>
<!-- 开启注解模式 -->
<mvc:annotation-driven/>
<!-- 访问静态资源 -->
<mvc:default-servlet-handler/>
</beans>
实体类 Employee
public class Employee {
private String name;
private int age;
private String department;
public Employee(String name, int age, String department) {
this.name = name;
this.age = age;
this.department = department;
}
//省略Getter和Setter方法
}
Controller
import com.alibaba.fastjson.JSON;
@Controller
//@RestController
public class RestfulController {
@GetMapping("/emp/list/{DEPT}")
@ResponseBody//将return返回的数据直接输出到客户端
public String list(@PathVariable("DEPT") String department) {
List<Employee> list = new ArrayList<Employee>();
if (department.equals("RESEARCH")) {
list.add(new Employee("JAMES", 38, "RESEARCH"));
list.add(new Employee("ANDY", 23, "RESEARCH"));
list.add(new Employee("SMITH", 31, "RESEARCH"));
}
return JSON.toJSONString(list);
}
}
request:
localhost:8080/emp/list/RESEARCH
response:
[{"age":38,"department":"RESEARCH","name":"JAMES"},
{"age":23,"department":"RESEARCH","name":"ANDY"},
{"age":31,"department":"RESEARCH","name":"SMITH"}]
发表回复