springMVC 注解总结

ssm大行其道的当下,了解越多的技巧越是对技术得心应手, 现在总结下springMVC的常用注解.

1.@RequestMapping 

RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

使用 @RequestMapping 的一些高级用法

(1)params属性

@RequestMapping (value= "testParams" , params={ "param1=value1" , "param2" , "!param3" })
    public String testParams() {
       System. out .println( "test Params..........." );
       return "testParams" ;
    }
用@RequestMapping 的params 属性指定了三个参数,这些参数都是针对请求参数而言的,它们分别表示参数param1 的值必须等于value1 ,参数param2 必须存在,值无所谓,参数param3 必须不存在,只有当请求/testParams.do 并且满足指定的三个参数条件的时候才能访问到该方法。所以当请求/testParams.do?param1=value1¶m2=value2 的时候能够正确访问到该testParams 方法,当请求/testParams.do?param1=value1¶m2=value2¶m3=value3 的时候就不能够正常的访问到该方法,因为在@RequestMapping 的params 参数里面指定了参数param3 是不能存在的。

(2)method属性

@RequestMapping (value= "testMethod" , method={RequestMethod. GET , RequestMethod. DELETE })
    public String testMethod() {
       return "method" ;
    }
在上面的代码中就使用method 参数限制了以GET 或DELETE 方法请求/testMethod 的时候才能访问到该Controller 的testMethod 方法。

(3)headers属性

@RequestMapping (value= "testHeaders" , headers={ "host=localhost" , "Accept" })
    public String testHeaders() {
       return "headers" ;
    }
headers 属性的用法和功能与params 属性相似。在上面的代码中当请求/testHeaders.do 的时候只有当请求头包含Accept 信息,且请求的host 为localhost 的时候才能正确的访问到testHeaders 方法。

 @RequestMapping 标记的处理器方法支持的方法参数和返回类型

1. 支持的方法参数类型

   (1 )HttpServlet 对象,主要包括HttpServletRequest 、HttpServletResponse 和HttpSession 对象。 这些参数Spring 在调用处理器方法的时候会自动给它们赋值,所以当在处理器方法中需要使用到这些对象的时候,可以直接在方法上给定一个方法参数的申明,然后在方法体里面直接用就可以了。但是有一点需要注意的是在使用HttpSession 对象的时候,如果此时HttpSession 对象还没有建立起来的话就会有问题。

   (2 )Spring 自己的WebRequest 对象。 使用该对象可以访问到存放在HttpServletRequest 和HttpSession 中的属性值。

   (3 )InputStream 、OutputStream 、Reader 和Writer 。 InputStream 和Reader 是针对HttpServletRequest 而言的,可以从里面取数据;OutputStream 和Writer 是针对HttpServletResponse 而言的,可以往里面写数据。

   (4 )使用@PathVariable 、@RequestParam 、@CookieValue 和@RequestHeader 标记的参数。

   (5 )使用@ModelAttribute 标记的参数。

   (6 )java.util.Map 、Spring 封装的Model 和ModelMap 。 这些都可以用来封装模型数据,用来给视图做展示。

   (7 )实体类。 可以用来接收上传的参数。

   (8 )Spring 封装的MultipartFile 。 用来接收上传文件的。

   (9 )Spring 封装的Errors 和BindingResult 对象。 这两个对象参数必须紧接在需要验证的实体对象参数之后,它里面包含了实体对象的验证结果。

2. 支持的返回类型

   (1 )一个包含模型和视图的ModelAndView 对象。

   (2 )一个模型对象,这主要包括Spring 封装好的Model 和ModelMap ,以及java.util.Map ,当没有视图返回的时候视图名称将由RequestToViewNameTranslator 来决定。

   (3 )一个View 对象。这个时候如果在渲染视图的过程中模型的话就可以给处理器方法定义一个模型参数,然后在方法体里面往模型中添加值。

   (4 )一个String 字符串。这往往代表的是一个视图名称。这个时候如果需要在渲染视图的过程中需要模型的话就可以给处理器方法一个模型参数,然后在方法体里面往模型中添加值就可以了。

   (5 )返回值是void 。这种情况一般是我们直接把返回结果写到HttpServletResponse 中了,如果没有写的话,那么Spring 将会利用RequestToViewNameTranslator 来返回一个对应的视图名称。如果视图中需要模型的话,处理方法与返回字符串的情况相同。

   (6 )如果处理器方法被注解@ResponseBody 标记的话,那么处理器方法的任何返回类型都会通过HttpMessageConverters 转换之后写到HttpServletResponse 中,而不会像上面的那些情况一样当做视图或者模型来处理。

   (7 )除以上几种情况之外的其他任何返回类型都会被当做模型中的一个属性来处理,而返回的视图还是由RequestToViewNameTranslator 来决定,添加到模型中的属性名称可以在该方法上用@ModelAttribute(“attributeName”) 来定义,否则将使用返回类型的类名称的首字母小写形式来表示。使用@ModelAttribute 标记的方法会在@RequestMapping 标记的方法执行之前执行。

@RequestMapping(value="/getName", method = RequestMethod.GET)    //get方法请求地址: /getName
public String getName(String userName) {
   return userName;
}
@RequestMapping(value="/user/{userId}/roles/{roleId}",method = RequestMethod.GET)   //get方法请求地址: /user/1/roles/1
public String getLogin(@PathVariable("userId") String userId,                  //请求地址中获取值userId
   @PathVariable("roleId") String roleId){  
     System.out.println("User Id : " + userId);  
   return "hello";  
} 
2.@PathVariable

用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数.

@RequestMapping(value="/javabeat/{regexp1:[a-z-]+}", method = RequestMethod.GET)  
public String getRegExp(@PathVariable("regexp1") String regexp1){  
      System.out.println("URI Part 1 : " + regexp1);  
   return "hello";  
} 
3.@RequestParam

将请求的参数绑定到方法中的参数上,其实即使不配置该参数,注解也会默认使用该参数。它有三个常用参数:defaultValue = "0", required = false, value = "isApp";defaultValue 表示设置默认值,required 通过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

@PathVariable和@RequestParam的区别 

请求路径上有个id的变量值,可以通过@PathVariable来获取  @RequestMapping(value = "/page/{id}", method = RequestMethod.GET)  
@RequestParam用来获得静态的URL请求入参     spring注解时action里用到。

A、处理requet uri 部分(这里指uri template中variable,不含queryString部分)的注解:   @PathVariable;

B、处理request header部分的注解:   @RequestHeader, @CookieValue;

C、处理request body部分的注解:@RequestParam,  @RequestBody;

D、处理attribute类型是注解: @SessionAttributes, @ModelAttribute;

4.@ResponseBody
它的作用是将返回类型直接输入到HTTP response body中。@ResponseBody在输出JSON格式的数据时会经常用到.

5.@SessionAttributes

该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute 对象;

示例代码:
@Controller  
@RequestMapping("/editPet.do")  
@SessionAttributes("pet")  
public class EditPetForm {  
    // ...   
} 

6.@ModelAttribute
该注解有两个用法,一个是用于方法上,一个是用于参数上;
用于方法上时:  通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:
A) @SessionAttributes 启用的attribute 对象上;
B) @ModelAttribute 用于方法上时指定的model对象;
C) 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。

用到方法上@ModelAttribute的示例代码:

@ModelAttribute  
public Account addAccount(@RequestParam String number) {  
    return accountManager.findAccount(number);  
} 
这种方式实际的效果就是在调用@RequestMapping的方法之前,为request对象的model里put(“account”, Account)。

用在参数上的@ModelAttribute示例代码:

@RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST)  
public String processSubmit(@ModelAttribute Pet pet) {  
     
} 
首先查询 @SessionAttributes有无绑定的Pet对象,若没有则查询@ModelAttribute方法层面上是否绑定了Pet对象,若没有则将URI template中的值按对应的名称绑定到Pet对象的各属性上。

详细:  http://blog.csdn.net/li_xiao_ming/article/details/8349115

7.@RequestHeader、

@RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上。

上面的代码,把request header部分的 Accept-Encoding的值,绑定到参数encoding上了, Keep-Alive header的值绑定到参数keepAlive上。

8.@CookieValue
@CookieValue 可以把Request header中关于cookie的值绑定到方法的参数上。

例如有如下Cookie值:JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84

@RequestMapping("/displayHeaderInfo.do")  
public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)  {  
} 
即把JSESSIONID的值绑定到参数cookie上。

9.@Value

@Value可以读取*.properties 配置文件的属性值

@Value("${INDEX_CONTENT_REDIS_KEY}")       //读取*.properties 配置文件的key为 INDEX_CONTENT_REDIS_KEY 的value, 配置文件放在 resource 文件夹下
private String INDEX_CONTENT_REDIS_KEY;




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: @GetMapping注解是Spring MVC中的一个注解,用于将HTTP GET请求映射到指定的处理方法上。 使用@GetMapping注解可以非常方便地定义RESTful风格的API接口。当客户端发送GET请求时,Spring MVC框架会根据请求的URL路径和HTTP参数自动匹配到对应的处理方法,并将处理方法的返回值转换成HTTP响应返回给客户端。 例如,使用@GetMapping注解可以定义一个处理GET请求的方法如下: ``` @GetMapping("/users") public List<User> getUsers() { // 从数据库或其他数据源中获取用户列表 List<User> userList = userService.getUserList(); return userList; } ``` 在上面的代码中,@GetMapping注解标注的是处理GET请求的方法,它的路径为"/users",表示当客户端发送GET请求访问"/users"时,会调用getUsers()方法并返回一个用户列表。 ### 回答2: @GetMapping注解是Spring MVC框架中的一个注解,它的作用是将HTTP的GET请求映射到特定的处理方法上。 当我们在控制器类的处理方法上加上@GetMapping注解时,表示该方法可以处理HTTP的GET请求。在请求到达控制器后,Spring MVC将根据请求的路径和GET请求的方法进行匹配,找到对应的处理方法,并执行该方法。 @GetMapping注解可以接受一个字符串参数,用于指定请求路径的映射规则。比如@GetMapping("/user")表示处理路径为“/user”的GET请求。这样,当我们通过浏览器访问“http://localhost:8080/user”时,Spring MVC将会调用被注解的处理方法。 使用@GetMapping注解可以使代码更加简洁,提供更加清晰的路径映射。相比于传统的配置方式,使用注解可以减少配置的工作量,并且更加直观。通过注解的方式,我们可以在控制器类中集中定义所有的请求路径和处理方法,使代码更加可读性和可维护性。 总结来说,@GetMapping注解的作用是将HTTP的GET请求映射到特定的处理方法上,使我们能够通过简洁的代码实现路径的映射和请求的处理。它是Spring MVC框架中重要的注解之一,可以提高开发效率和代码的可读性。 ### 回答3: @GetMapping注解是Spring MVC框架提供的一种HTTP请求映射注解,用于将指定的URL请求与处理方法进行映射关联。其作用主要有以下几个方面: 1. 定义HTTP的GET请求:使用@GetMapping注解可以将一个方法映射到指定的URL上,并指定该方法处理的是HTTP的GET请求。这样当客户端发送GET请求时,Spring MVC会自动将请求与对应的处理方法进行匹配。 2. 精确匹配URL路径:@GetMapping注解中可以通过value或path属性指定URL的具体路径。这样可以进行精确匹配,只有当客户端请求的URL路径与注解中指定的路径完全一致时,才能触发对应的处理方法。 3. 支持多路径映射:@GetMapping注解中可以同时指定多个URL路径,使用数组的形式进行定义。这样可以将多个不同路径的请求映射到同一个处理方法上。 4. 支持RESTful风格的URL路径:@GetMapping注解还支持在URL路径中使用占位符,以支持RESTful风格的URL设计。通过在URL路径中定义占位符,可以将请求中的参数值传递给处理方法进行处理。 总的来说,@GetMapping注解的作用是用来定义处理HTTP的GET请求,并将请求的URL路径与处理方法进行映射关联。通过该注解,我们可以方便的定义并处理多种不同URL路径的GET请求,提高开发效率和代码可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值