RESTful是一种软件设计规范,是客户端和服务端进行数据交互的一个规范。 早期使用JSP页面开发网页时,数据交互基本都是经过表单提交,而后经过内置对象传递。当HTML5兴起,移动互联网兴起,网站后端服务,不只要考虑PC端的网页,也要考虑移动端数据的展现、小程序、HTML5页面等。若是须要多个终端(Android、iOS、小程序、Pad、HTML5页面)共用一个后端,通常来讲主流方案就是使用JSON进行传递。RESTful则规范了请求的URL,注意RESTful只是一个规范,不是一个技术。 在RESTful中:java
GET(查) POST(增长) DELETE(删) PUT(改) 在RESTful接口中,全部的方法都是返回JSON,没有返回页面的(ModelAndView),所以,全部的方法上都须要添加<!--@ResponseBody-->注解。一个替代的简化方案,是使用 @RestController 代替@Controller。@RestController其实是一个组合注解,是@Controller和<!--@ResponseBody-->的组合: web
@Controller public class SpringController { /** * 按照id查询 * @param id */ @GetMapping("/user/{id}") //@ResponseBody public void getUserById(@PathVariable Integer id){ System.out.println("."+id); } @PostMapping("/user") //@ResponseBody public void addUser(@RequestBody User user){ System.out.println(user); } @DeleteMapping("/user/{id}") //@ResponseBody public void deleteUserById(@PathVariable Integer id){ System.out.println(id); } @PutMapping("/user") //@ResponseBody public void updateUserById(@RequestBody User user){ System.out.println(user); } }
SpringMVC中的拦截器对应了Web基础中的过滤器。 拦截器和过滤器的区别: |序号|区别 | |--|--| | 1| 通常来讲,若是使用了SpringMVC框架,而后有拦截器的需求,建议使用拦截器而不是过滤器 | |2 |过滤器依赖于Servlet容器,而拦截器是SpringMVC自带的,不依赖容器 | |3| 拦截器的功能更为强大,由于拦截器是一种AOP风格的过滤器(实际上这个功能过滤器也能实现,只是没有拦截器这么简单明了)|spring
package com.sxt.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class MyInterceptor implements HandlerInterceptor{ /** * 在执行controller以前执行的方法 * @return * true 放过请求 * false 拦截请求 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle ..."); return true; } /** * 在controller处理完成请求后执行 * 在返回ModelAndView以前执行,能够修改ModelAndView中的信息 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle ..."); modelAndView.setViewName("/error.jsp"); } /** * 在postHandle方法执行完成后执行,不能影响返回结果 * */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion..."); } }
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd 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-4.3.xsd"> <!-- 开启扫描 --> <context:component-scan base-package="com.sxt.*"/> <!-- 开启SpringMVC注解的方式 --> <mvc:annotation-driven> <mvc:message-converters> <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 注册拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.sxt.interceptor.MyInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> </beans>