springmvc基础知识(21):springmvc常用注解

@Controller

@Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如下特点:

  •     不需要继承任何类, 也不需要实现任何接口
  •     可以处理多个请求
  •     可以使用Servlet的相关特性

springmvc容器自动扫描所有被@Controller注解的类, 并将其注册为springmvc容器的bean。

DispatcherServlet接收请求然后扫描容器中的bean,查找使用了@RequestMapping的方法, 这些方法是真正处理请求方法的处理器.根据请求url去匹配相应的处理器。

在springmvc配置文件中配置:

        <!-- 扫描@Controller创建bean -->
	<context:component-scan base-package="com.springmvc"
		use-default-filters="false">
		<context:include-filter type="annotation"
			expression="org.springframework.stereotype.Controller" />
	</context:component-scan>
注意:这里配置只扫描@Controller注解,防止和spring容器重复创建bean

下面是使用@Controller注解定义的控制器

@Controller

public class HelloController {
    ...
}

______________________________________________________________________________________________________________________________

@RequestMapping

@RequestMapping注解用来表示请求具体由哪个类的哪个方法来处理. 即

@RequestMapping既可以用来注解一个类, 也可以用来注解一个方法. 当用来注解一个类的时候, 所有方法都将映射为相对于类级的请求.通俗的说就是在请求url中多加一层“目录”。

@Controller
public class HelloController {


   @RequestMapping("/hello")

   public String sayHello(HttpServletRequest request) {

       model.addAttribute("message", "Hello World");

       return "helloworld";

    }

}

@RequestMapping注解支持的属性
属性 类型 是否必要 说明
name
String       否    映射地址别名, 一般不设置

value

String[]

指定请求的地址映射到方法上

method RequestMethod[] 请求的方法类型, 包括GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE,TRACE
consumes     String[] 指定处理请求的提交内容类型(Content-Type),例如application/json
produces      String[] 指定返回的内容类型, 返回的内容类型必须是request请求头(Accept)中包含的类型
params          String[] 指定request中必须包含某些参数值时, 此方法才处理此请求
header           String[] 指定request中必须包含某些指定的header值, 此方法才处理此请求
path String[] In a Servlet environment... 就是value属性的别名, value属性没有含义不确切,path含义更明确
常用的@RequestMapping属性:
  •  value

   value属性用于将请求映射到方法上. value属性是@RequestMapping的默认属性, 当只有唯一的属性时, 则可以省略属性名, 如下两个注解含义是一样的:

@RequestMapping("/user")
@RequestMapping(value="/user")

   多个请求地址映射到同一个方法

@RequestMapping(value={"/user", "/customer"})
  •  method

   method属性指定此方法只处理哪些HTTP请求. 例如:

 // 此方法只处理POST请求.
@RequestMapping(value="/user", method=RequestMethod.POST)

 // 此方法既支持POST请求, 又支持GET请求
@RequestMapping(value="/user",method={RequestMethod.POST,RequestMethod.GET}

 如果没有配置method属性, 则此方法可以处理任意的HTTP请求.

 _____________________________________________________________________________________________________________________________

@RequestParam

@RequestParam注解用于将指定的请求参数绑定到方法的参数.


@RequestParam注解支持的属性
属性 类型 是否必要 说明
value String 从请求中匹配参数的key
required boolean 指示参数是否可为空
defaultValue String 没有匹配到数据时使用的默认值

@RequestMapping(value="/add",method=RequestMethod.POST)

public Stringadd(@RequestParam("name") String name,@RequestParam("author")String author) {

           ...

}

  注意: 当方法参数没有用@RequestParam修饰时, 那么会默认绑定同名的参数.

 _____________________________________________________________________________________________________________________________


@PathVariable

@PathVariable注解可以方便的从URL中获取请求的参数.

它只支持一个类型为String的属性, 表示绑定的请求参数的名称, 省略则默认绑定同名的参数.

@RequestMapping(value="/book/{bookId}")

public ModelAndView get(@PathVariable int bookId)
如果不同名,可以使用value属性指定获取的参数
@RequestMapping(value="/book/{id}")

public ModelAndView get(@PathVariable("id") int bookId)

  _____________________________________________________________________________________________________________________________


@RequestHeader

@RequestHeader注解用于将请求的头信息区数据绑定到请求处理方法的参数上.


@RequestHeader注解支持的属性
属性 类型 是否必要 说明
value String 从请求中匹配参数的key
required boolean 指示参数是否可为空
defaultValue String 没有匹配到数据时使用的默认值
和@RequestParam没什么区别,只不过这里是获取的请求头信息
public void testRequestHeader(@RequestHeader("User-Agent")String userAgent,
                              @RequestHeader("Accept") String[] accepts) {

   // ...

}
 _____________________________________________________________________________________________________________________________


@CookieValue

@CookieValue注解将Cookie里面的数据绑定到请求处理方法的参数上.

                                                        @CookieValue注解支持的属性

属性 类型 是否必要 说明
value String 从请求中匹配参数的key
required boolean 指示参数是否可为空
defaultValue String 没有匹配到数据时使用的默认值

  _____________________________________________________________________________________________________________________________


@SessionAttributes

@SessionAttributes注解指定Model中哪些数据需要转存到session中.

                                                           @SessionAttributes注解支持的属性

属性 类型 是否必要 说明
values               String[]           Model中属性的名称, 储存在session中也会用此名称
types Class<?>[] 根据指定参数的类型, 将模型中对应类型的参数存储到session中

注意:@SessionAttributes注解只能声明在类上, 不能声明在方法上.
具体使用详请查看  -- @SessionAttributes注解的使用

_____________________________________________________________________________________________________________________________


@ModelAttribute

@ModelAttribute注解用于将请求参数绑定到Model对象上.

@ModelAttribute只支持一个类型为String的属性value, 表示绑定的属性名称.

需要注意的是, @ModelAttribute注解修饰的方法会在Controller的每个请求处理方法执行前被执行, 如果一个Controller映射了多个URL要注意这一问题.

具体使用详请查看  -- @ModelAttribute 的使用

 _____________________________________________________________________________________________________________________________


@RequestBody

springmvc提供了处理JSON格式请求和响应的功能, 可以方便的使服务端的请求处理方法和客户端JSON格式消息进行交互, 这时就用到了@RequestBody注解.

@RequestBody注解用于读取request请求的body部分的数据, 解析后, 把相应的数据绑定到请求处理方法的参数上.

    前台页面使用GET或POST请求提交数据时, 数据编码格式会由请求头的ContentType来指定, 可分为以下几种情况:

  • application/x-www-form-urlencoded, 此时可以使用@RequestParam,@ModelAttribute来处理参数
  • multipart/form-data, 此时不能使用@RequestBody处理.
  • application/json或application/xml, 只能使用@RequestBody处理.
具体可参考 --  springmvc中ajax的应用

 _____________________________________________________________________________________________________________________________


@ResponseBody

@ResponseBody注解用于将Controller的请求处理方法返回的数据对象, 转换为指定格式后, 写入到response对象的的body数据区. 一般地, 返回的数据不是某个具体的视图页面, 而是某种格式的数据(json, xml等).

具体可参考 --  springmvc中ajax的应用




猜你喜欢

转载自blog.csdn.net/abc997995674/article/details/80468129
今日推荐