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>