SpringMVC常用注解

Published on with 91 views

SpringMVC常用注解

@Controller

org.springframework.stereotype.Controller注解是用来指示Spring类的实例是一个控制器。主要起到了一个标识的作用。使用它标记的类就是一个MVC里的Controller对象。Spring通过java的反射机制首先检测类是否有@Controller注解,如果有再去检测该类里面的方法是否含有@RequestMapping注解,然后再去invoke真正的处理请求的方法。

Spring找到控制器的两件必要事情

  • 在SpringMVC的配置文件的头文件中引入spring-context
  • 使用<context:component-scan base-package="top.code666.controller"/>元素,它的作用是:启动组件扫描,扫描top.code666.controller包下所有类文件,使得@Controller、@Service、@repository、@Component注解有效

SpringMVC中用于参数绑定的注解
都在org.springframework.web.bind.annotation包中,根据处理request内容的不同可以分为以下四类:

  • 处理request body部分的注解:@RequestParam、@RequestBody
  • 处理request uri部分的注解:@PathVariable
  • 处理request header部分的注解:@RequestHeader、@CookieValue
  • 处理attribute类型的注解:@SessionAttributes、@ModelAttribute

@RequestMapping

org.springframework.web.bind.annotation.RequestMapping注解类型指示Spring用哪一个类或方法来处理请求动作,该注解可用于类或方法。==严格说,它虽然在bind.annotation包下面,但它并不属于参数绑定注解==

以下为@RequestMapping注解可指定的属性

属性类型说明
valueString[]用于将指定请求的实际地址映射到方法上,默认为此属性
nameString给映射地址指定一个别名
methodRequestMethod[]映射指定请求的方法类型
consumesString[]指定处理请求的提交内容类型(Content-Type),例如application/json,text/html
producesString[]指定返回的内容类型,返回的内容类型必须是request请求头(Accept)中所包含的类型。
paramsString[]指定request中必须包含某些参数值时,才让该方法处理(params=“myParam=myValue”,方法仅处理其中名为myParam,值为myValue的请求)
headersString[]指定request中必须包含某些指定的header值,才能让该方法处理请求(headers=“Referer=http://www.code666.top”,方法仅处理Referer相对应的请求)
PathString[]与value等价

请求处理方法可出现的部分参数类型

  • HttpServletRequest、HttpServletResponse
  • HttpSession
  • InputStream、OutputStream
  • Reader、Writer
  • Model、ModelMap
  • SessionStatus
  • @PathVariable、@RequestParam、@RequestHeader、@RequestBody、@RequestPart

请求处理方法可返回的类型

  • ModelAndView
  • Model
  • Map<k,v>
  • View
  • String
  • HttpEntity或ResponseEntity
  • void

@RequestParam

org.springframework.web.bind.annotation.RequestParam注解类型用于将指定的请求参数赋值给方法中的形参。
如下示例:

@RequestMapping(value="/login")
public ModelAndView login(
			@RequestParam("loginname") String loginname,
            @RequestParam("password") String password){
      return ...;
}

以下为@RequestParam注解可指定的属性

属性 类型 说明
nameString指定请求头绑定的名称
valueStringname属性的别名
requiredboolean指示参数是否必须绑定
defaultValueString如果没有传递参数而使用的默认值

@PathVariable

org.springframework.web.bind.annotation.PathVariable注解类型可以非常方便地获得请求URL中的动态参数。@PathVariable注解只支持一个属性value,类型为String,表示绑定名称,如果省略则默认绑定同名参数。

示例

@RequestMapping(value="/pathTest/{userId}")
public void pathTest(@PathVariable Integer userId)

@RequestHeader

org.springframework.web.bing.annotation.RequestHeader注解类型用于将请求的头信息数据映射到功能处理方法的参数上。

示例

@RequestMapping(value="/requestHeaderTest")
public void requestHeaderTest(
			@RequestHeader("User-Agent") String userAgent,
            @RequestHeader(value="Accept") String[] accepts)

以上代码表示,将请求头"User-Agent"的信息赋值到userAgent变量上

@RequestHeader注解可指定的属性

属性 类型 说明
name String 指定请求头绑定的名称
valueStringname属性的别名
requiredboolean指示参数是否必须绑定
defaultValueString如果没有传递参数而使用的默认值

@CookieValue

org.springframework.web.bind.annotation.CookieValue注解用于将请求的Cookie数据映射到功能处理方法的参数上。

示例

@RequestMapping(value="/cookieValueTest")
public void cookieValueTest(
			@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)

如果cookie中JSESSIONID属性有值则赋给变量sessionId

@CookieValue注解可指定的属性

属性类型说明
nameString指定请求头绑定的名称
valueStringname属性的别名
requiredboolean指示参数是否必须绑定
defaultValueString如果没有传递参数而使用的默认值

@SessionAttributes

org.springframework.web.bind.annotation.SessionAttributes注解允许我们有选择地指定Model中的哪些属性需要转存到HttpSession对象当中。
==注:@SessionAttributes只能声明在类上,而不能声明在方法上==

@SessionAttributes注解课指定的属性

属性类型说明
namesString[]Model中属性的名称,即存储在HttpSession中的属性名称
valueString[]names属性的别名
typesClass<?>[]指定参数是否必须绑定

@ModelAttribute

org.springframework.web.bind.annotation.ModelAttribute注解类型将请求参数绑定到Model对象
@ModelAttribute注解只支持一个属性value,类型为String,表示绑定的属性名称

注意

被该注解修饰的方法会在Controller每个方法执行前被执行,因此在一个Controller映射到多个URL时谨慎使用

Responses