SpringMVC中Controller常用注解的理解

一、简介:在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

二、@Controller @Controller 是标记在Controller 类(包和类名之间)上面的。用于指示Spring类的实例是一个控制器。Controller接口的实现类只能处理一个单一请求动作,而@Controller注解的控制器可以支持同时处理多个请求动作,更加灵活。Spring使用 扫描机制 查找应用程序中所有基于注解的控制器类。分发处理器 会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping注解,而使用@RequestMapping注解的方法才是真正处理请求的处理器。为了保证能找到控制器,需要完成两件事情:

①在Spring MVC的配置文件中,使用<context:component-scan/>元素,该元素的功能为:启动包扫描功能,以便注册带有@Controller,@Service,@repository,@Component等注解的类成为SPring的Bean。

②<context:component-scan base-package="包路径">

应该 将所有控制器类都在基本包下,并且指定扫描该包

三、@ResponseBody @ResponseBody注解是springmvc中用于方便json与string,实体对象之间转换的一个注解。在controller类中我们可以在方法上面添加@ResponseBody注解,这样我们返回实体对象或者字符串时,就会自动转换成json对象传给前端。在spring4.0后,@ResponseBody又可以加在类上,表示该类中的所有方法都加有@ResponseBody,很方便。

***使用@RestController注解在类上,作用等于@Controller与@ResponseBody同时加在类上***

要让@ResponseBody在类上也起作用,需要在springmvc配置文件中加上<mvc:annotation-driven />这一行配置才可以。而@ResponseBody使用在方法上,则不用添加该配置也可以使用。也就是说springmvc默认只支持@ResponseBody在方法上使用,不支持在类上的使用。

四、@RequestMapping在Spring MVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理哪些URL请求, 可以在方法的声明中使用。

①将 @RequestMapping 注解在类中方法上,而Controller类上不添加 @RequestMapping 注解,这时的请求 URL 是相对于 Web 根目录。

②将 @RequestMapping 注解在Controller 类上,这时类的注解是相对于 Web 根目录,而方法上的是相对于类上的路径。

@RequestMapping 中的 value path 属性(这两个属性作用相同,可以互换),@PathVariable 将 URL 中的占位符绑定到控制器的处理方法的参数中,占位符使用{}括起来。

@RequestMapping 中的 method 主要用来定义接收浏览器发来的何种请求。在Spring中,使用枚举类

org.springframework.web.bind.annotation.RequestMethod来定义浏览器请求的方式。

Http规范定义了多种请求资源的方式,最基本的有四种,分别为:GET(查)、POST(增)、PUT(改)、DELETE(删),而URL则用于定位网络上的资源相当于地址的作用,配合四种请求方式,可以实现对URL对应的资源的增删改查操作。

在实际应用中,很多人并没有按照这个规范做,因为使用GET/POST同样可以完成PUT和DELETE操作,甚至GET也可以完成POST操作,因为GET不需要用到表单,而POST却需要通过表单来发送。

由于在 RequestMapping 注解类中 method() 方法返回的是 RequestMethod 数组,所以可以给 method 同时指定多个请求方式。

@RequestMapping 的 params 属性,该属性表示请求参数,也就是追加在URL上的键值对,多个请求参数以&隔开。

@RequestMapping 的 headers 属性,该属性表示请求头。

用于HTTP协义交互的信息被称为HTTP报文,客户端发送的HTTP报文被称为请求报文,服务器发回给客户端的HTTP报文称为响应报文,报文由报文头部和报文体组成。

请求头部(Request Headers):请求头包含许多有关客户端环境和请求正文的信息,例如浏览器支持的语言、请求的服务器地址、客户端的操作系统等。

响应头部(Rsponse Headers):响应头也包含许多有用的信息,包括服务器类型、日期、响应内容的类型及编码,响应内容的长度等等。

五、若感觉对你有所帮助点个赞




相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页