`
wx1568908808
  • 浏览: 31414 次
文章分类
社区版块
存档分类
最新评论

SpringMVC-Restful和拦截器

 
阅读更多

Restful风格

  RESTful是一种软件设计规范,是客户端和服务端进行数据交互的一个规范。 早期使用JSP页面开发网页时,数据交互基本都是通过表单提交,然后通过内置对象传递。当HTML5兴起,移动互联网兴起,网站后端服务,不仅要考虑PC端的网页,也要考虑移动端数据的展示、小程序、HTML5页面等。如果需要多个终端(Android、iOS、小程序、Pad、HTML5页面)共用一个后端,一般来说主流方案就是使用JSON进行传递。RESTful则规范了请求的URL,注意RESTful只是一个规范,不是一个技术。 在RESTful中:

  1. 一个URL操作一个资源
  2. 请求的URL中不能有动词
  3. 使用HTTP的请求方式来描述请求行为,例如:

GET(查) POST(增加) DELETE(删) PUT(改)   在RESTful接口中,所有的方法都是返回JSON,没有返回页面的(ModelAndView),因此,所有的方法上都需要添加<!--@ResponseBody-->注解。一个替代的简化方案,是使用 @RestController 代替@Controller。@RestController实际上是一个组合注解,是@Controller和<!--@ResponseBody-->的组合: 在这里插入图片描述

案例


@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风格的过滤器(实际上这个功能过滤器也能实现,只是没有拦截器这么简单明了)|

案例

定义拦截器

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>

测试

在这里插入图片描述在这里插入图片描述

转载于:https://my.oschina.net/u/4116634/blog/3042047

分享到:
评论

相关推荐

    springmvc-restful

    在Spring MVC中,通常通过实现`Filter`接口并注册到DispatcherServlet,或者使用`WebMvcConfigurer`接口的`addInterceptors()`方法来添加一个拦截器,设置请求编码。 ```java public class ...

    SpringMVC-7 RESTful CRUD

    在SpringMVC中,我们使用`@RestController`注解来标记控制器类,它结合了`@Controller`和`@ResponseBody`,用于创建RESTful服务。例如: ```java @RestController @RequestMapping("/users") public class ...

    springmvc-high-other-05.rar

    4. **拦截器(Interceptor)**:SpringMVC提供了Interceptor机制,允许在请求处理前或后执行自定义逻辑,如权限检查、日志记录等。通过创建自定义Interceptor并注册到DispatcherServlet,我们可以实现高效且灵活的...

    springMVC-jar包

    6. **拦截器(Interceptor)**:SpringMVC允许定义拦截器,可以在请求处理前后执行一些通用操作,如权限验证、日志记录等。 7. **数据绑定和类型转换**:SpringMVC自动处理请求参数与模型属性之间的绑定和类型转换...

    SpringMVC-demo - examples

    `SpringMVC` 的拦截器可以实现请求处理前后的预处理和后处理功能,比如登录检查、日志记录等。通过 `@Configuration` 类和 `@EnableWebMvc` 注解,我们可以配置 `HandlerInterceptor` 实例。 9. **上传下载** `...

    springmvc-demo06-ResultFul.zip

    Spring MVC 是一个强大的...此外,项目可能还涵盖了Spring MVC的其他高级特性,如拦截器和全局异常处理,以及与数据库的交互。通过学习这个项目,开发者能够深入理解并掌握Spring MVC框架在构建RESTful服务中的应用。

    spring最有学习价值的Demo(springmvc-master)

    - **HandlerInterceptor**:自定义拦截器,实现预处理和后处理逻辑。 7. **RESTful 风格** - 使用 HTTP 动词(GET, POST, PUT, DELETE)来对应资源的不同操作。 - **@ResponseBody**:将方法返回值直接写入 ...

    springmvc-demo.zip

    3. **配置文件**:在 "springmvc-demo" 中,通常会有 "servlet-context.xml" 或类似的配置文件,用于定义 MVC 组件的映射、拦截器、视图解析器等。 4. **@Controller**:在 Java 类上使用此注解标识该类为 ...

    springMvc-Study1

    9. **拦截器(Interceptor)**:Spring MVC 允许自定义拦截器,可以在请求处理前后进行预处理和后处理,如权限检查、日志记录等。 10. **转换器和格式化器(Converter & Formatter)**:这些组件用于将请求参数转换...

    springmvc-wys笔记

    9. **拦截器(Interceptor)**:Spring MVC允许定义拦截器,可以在请求处理前后执行自定义逻辑,如日志记录、权限验证等。 10. **转换器和格式化器(Converter and Formatter)**:这些组件用于类型转换,例如将请求...

    springmvc--1.zip

    Spring MVC 是一个基于 ...后续部分可能涉及更高级的主题,如拦截器、数据绑定、事务管理和 RESTful API 的实现。通过这个教程,初学者可以系统地了解和掌握 Spring MVC 框架的核心功能,并能够应用于实际项目开发中。

    springmvc-01.rar

    9. **Interceptor(拦截器)**:拦截器可以实现预处理和后处理功能,比如登录检查、日志记录等,通过实现`HandlerInterceptor`接口并注册到Spring MVC中。 10. **转换与格式化**:Spring MVC提供了数据绑定和类型...

    跟开涛学SpringMVC-高清版

    10. **拦截器(Interceptor)**:理解拦截器的工作原理,如何自定义拦截器以实现登录验证、日志记录等功能。 11. **RESTful API**:了解如何使用SpringMVC构建RESTful风格的服务,包括HTTP动词(GET、POST、PUT、...

    springMVC-ppt.rar

    8. **拦截器(Interceptor)**:类似于 AOP 的预处理和后处理,可以在请求处理前后执行特定逻辑,如权限验证、日志记录等。 9. **数据绑定**:Spring MVC 提供了自动的数据绑定功能,可以方便地将 HTTP 参数绑定到...

    springmvc-学习指南(第二版)源码

    8. **拦截器**:自定义拦截器实现预处理和后处理逻辑,如登录检查。 9. **RESTful风格**:使用`@GetMapping`、`@PostMapping`等处理RESTful请求。 10. **模板引擎**:如Thymeleaf或Freemarker的使用,渲染视图。 ...

    SpringMVC-手写笔记-附加截图

    SpringMVC的配置文件中,可以定义自动扫描的包,以便发现和管理控制器类,同时配置视图解析器,如Bean和视图的映射。POJO(Plain Old Java Object)是SpringMVC中用于接收和处理请求的数据对象。 SpringMVC的注解...

    springmvc-demo07-响应(数据共享,页面跳转).zip

    5. **MVC配置**:在Spring MVC的应用中,通常需要配置`DispatcherServlet`、视图解析器、拦截器等。这些配置可以在XML配置文件中进行,也可以通过Java配置类实现。 在这个"springmvc-demo07-响应(数据共享,页面...

    SSM 框架整合教程:三、SpringMVC-尚硅谷学习笔记 2022 年

    - **拦截器使用**:编写自定义拦截器,实现登录检查、日志记录等功能。 通过这个教程,你可以深入了解SpringMVC的工作原理,以及如何在实际项目中整合和运用SSM框架。通过阅读提供的.md和.pdf文件,你将获得更详尽...

    SpringMVC-02.doc

    本文将深入讲解Spring MVC的核心概念,包括ModelAndView的使用、数据交互、控制器注解、RESTFul风格案例、文件上传、拦截器及综合案例。 1. **Spring MVC架构** - **Model**:模型层,通常由Java对象(如领域模型...

    SpringMVC拦截器源代码.zip

    这个名为“SpringMVC拦截器源代码.zip”的压缩包可能包含了Spring MVC拦截器的实现源码,这对于理解和学习如何自定义拦截器以增强应用功能非常有帮助。 1. **拦截器的基本概念** - 拦截器是AOP(面向切面编程)的...

Global site tag (gtag.js) - Google Analytics