`
wusuoya
  • 浏览: 641311 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Spring MVC handler method 参数绑定常用的注解

    博客分类:
  • SSH
 
阅读更多
参考链接:http://csjava.blog.163.com/blog/static/1904700332012102742025948/?COLLCC=3184617125&COLLCC=1892771493&COLLCC=1691444901

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

handler method 参数绑定常用的注解,我们根据他们处理的Request的不同内容部分分为四类:(主要讲解常用类型)

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

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

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

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


1、 @PathVariable

当使用@RequestMapping URI template 样式映射时, 即 someUrl/{paramId}, 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上。

示例代码:

[java] view plaincopyprint?

    @Controller 
    @RequestMapping("/owners/{ownerId}") 
    public class RelativePathUriTemplateController { 
     
      @RequestMapping("/pets/{petId}") 
      public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {     
        // implementation omitted  
      } 
    } 

上面代码把URI template 中变量 ownerId的值和petId的值,绑定到方法的参数上。若方法参数名称和需要绑定的uri template中变量名称不一致,需要在@PathVariable("name")指定uri template中的名称。

2、 @RequestHeader、@CookieValue

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

示例代码:

这是一个Request 的header部分:

    Host                    localhost:8080 
    Accept                  text/html,application/xhtml+xml,application/xml;q=0.9 
    Accept-Language         fr,en-gb;q=0.7,en;q=0.3 
    Accept-Encoding         gzip,deflate 
    Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7 
    Keep-Alive              300 

    @RequestMapping("/displayHeaderInfo.do") 

    public void displayHeaderInfo(@RequestHeader("Accept-Encoding") String encoding, 
                                  @RequestHeader("Keep-Alive") long keepAlive)  { 
    } 

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


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

例如有如下Cookie值:

    JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84

参数绑定的代码:

    @RequestMapping("/displayHeaderInfo.do") 
    public void displayHeaderInfo(@CookieValue("JSESSIONID") String cookie)  { 
    } 

即把JSESSIONID的值绑定到参数cookie上。


3、@RequestParam, @RequestBody

@RequestParam

A) 常用来处理简单类型的绑定,通过Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;

B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;

C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

示例代码:

    @Controller 
    @RequestMapping("/pets") 
    @SessionAttributes("pet") 
    public class EditPetForm { 
        @RequestMapping(method = RequestMethod.GET) 
     public String setupForm(@RequestParam("petId") int petId, ModelMap model) { 
           Pet pet = this.clinic.loadPet(petId); 
       model.addAttribute("pet", pet); 
       return "petForm"; 
       } 

@RequestBody

该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;

它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。

因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap<String, String>里,这种情况在某些特殊需求下使用,详情查看FormHttpMessageConverter api;

示例代码:

[java] view plaincopyprint?

    @RequestMapping(value = "/something", method = RequestMethod.PUT) 
    public void handle(@RequestBody String body, Writer writer) throws IOException { 
      writer.write(body); 
    } 
    

4、@SessionAttributes, @ModelAttribute

@SessionAttributes:

该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。

该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute 对象;

示例代码:

[java] view plaincopyprint?

    @Controller 
    @RequestMapping("/editPet.do") 
    @SessionAttributes("pet") 
    public class EditPetForm { 
        // ...  
    } 

@ModelAttribute

该注解有两个用法,一个是用于方法上,一个是用于参数上;

用于方法上时:  通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;

用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上;要绑定的值来源于:

A) @SessionAttributes 启用的attribute 对象上;

B) @ModelAttribute 用于方法上时指定的model对象;

C) 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中。


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

[java] view plaincopyprint?

    // Add one attribute  
    // The return value of the method is added to the model under the name "account"  
    // You can customize the name via @ModelAttribute("myAccount")  
     
    @ModelAttribute 
    public Account addAccount(@RequestParam String number) { 
        return accountManager.findAccount(number); 
    }
    这种方式实际的效果就是在调用@RequestMapping的方法之前,为request对象的model里put(“account”, Account);


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

[java] view plaincopyprint?

    @RequestMapping(value="/owners/{ownerId}/pets/{petId}/edit", method = RequestMethod.POST) 
    public String processSubmit(@ModelAttribute Pet pet) { 
        
    } 

首先查询 @SessionAttributes有无绑定的Pet对象,若没有则查询@ModelAttribute方法层面上是否绑定了Pet对象,若没有则将URI template中的值按对应的名称绑定到Pet对象的各属性上。
分享到:
评论

相关推荐

    spring-mvc-showcase

    当表单提交时,Spring MVC会自动将请求参数与Model对象的属性进行绑定。 七、异常处理与国际化 Spring MVC提供了全局和局部的异常处理器,如@ControllerAdvice和@ExceptionHandler,可以统一处理程序中的异常。...

    spring mvc demo

    Spring MVC 提供了强大的数据绑定功能,可以直接将请求参数绑定到Controller方法的参数上。同时,通过`@Valid`和`Validator`接口,可以实现表单验证,确保输入的数据符合业务规则。 ### 7. 异常处理 Spring MVC ...

    spring mvc 自學筆記

    在 Spring MVC 中处理文件上传非常简单,只需要在控制器方法中使用 `MultipartFile` 类型的参数即可。例如: ```java @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") ...

    Spring MVC实例

    Spring MVC 支持模型数据绑定,可以将请求参数自动绑定到 Controller 方法的参数上。例如: ```java @RequestMapping("/user") public String addUser(@RequestParam("name") String userName, @RequestParam(...

    配置springmvc的spring-webmvc的jar包

    从Spring 3.0开始,Spring MVC引入了注解驱动的开发方式,使得配置简化,开发者可以直接在Controller类和方法上使用注解,如@RequestMapping、@RequestParam、@PathVariable等。 **四、Spring MVC与其他技术的集成*...

    Spring构建mvc工程详细教程.pdf

    `&lt;mvc:annotation-driven&gt;`标签启用了基于注解的控制器,它会自动注册`@RequestMapping`注解处理器、数据绑定器和类型转换器等。`&lt;bean&gt;`标签配置了视图解析器,该解析器会将控制器返回的逻辑视图名解析为具体视图...

    一个SpringMVCDemo

    &lt;bean id="handlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"&gt; ``` 或者 ```java @Configuration @EnableWebMvc public class WebConfig ...

    springmvc.pdf

    - **数据绑定与验证**:Spring MVC 提供了强大的数据绑定和验证机制,可以自动将请求参数绑定到方法参数,并进行复杂的验证逻辑。 #### 八、Spring MVC 3 强大的请求映射规则 Spring MVC 3 引入了许多新的特性来...

    springMvc学习指南源代码

    Spring MVC 提供了自动的数据绑定机制,可以将请求参数自动绑定到控制器方法的参数上。同时,它还支持 JSR-303/JSR-349 验证规范,用于对数据进行校验。 7. **上传文件**: 使用 MultipartFile 接口,Spring MVC ...

    Spring MVC学习教程之RequestMappingHandlerAdapter详解

    2. 执行控制器方法:适配器找到合适的`HandlerMethod`后,会调用该方法执行,将请求参数传递进去。 3. 处理响应:控制器方法执行完成后,`RequestMappingHandlerAdapter`会处理返回的对象。如果是`ModelAndView`,...

    SpringMVC源码分析系列

    首先,HandlerMethod类是Spring3.1版本之后引入的,它封装了方法参数、方法注解、方法返回值等元素。HandlerMethod的子类InvocableHandlerMethod拥有WebDataBinderFactory和HandlerMethodArgumentResolverComposite...

    springmvc+fastjson demo

    3. **Spring MVC 中使用 Fastjson**:在 Spring MVC 中,Fastjson 可用于接收 JSON 格式的请求参数,或者将处理结果转换成 JSON 响应。例如,使用 `@RequestBody` 注解接收 JSON 数据,使用 `@ResponseBody` 注解将...

    springMVC学习

    #### 六、Spring MVC 中的常用注解 - **@Controller**:标记类为控制器类。 - **@RequestMapping**:映射请求路径。 - **@RequestParam**:用于获取请求参数。 - **@PathVariable**:用于获取 URL 中的动态参数。 -...

    springmvc3.0帮助文档

    **控制器适配器**(Handler Adapter)和 **控制器映射**(Handler Mapping)是 Spring MVC 架构中的核心组件。 - **控制器适配器**:处理请求并调用相应的控制器方法。 - **控制器映射**:将请求 URL 映射到具体的...

    spring chm文档

    2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的...

    java初学框架springmvc

    在Java的世界里,Spring MVC是一个极其重要的框架,尤其对于初学者而言,它是学习Web开发的首选。Spring MVC设计模式遵循模型-视图-控制器(MVC)架构,它简化了Web应用程序的开发流程,使开发者可以更专注于业务...

    SpringMvc简单入门

    - **自动绑定**:Spring MVC 支持自动将请求参数绑定到方法参数上。 - **示例代码**: ```java @RequestMapping(value = "/user/{id}", method = RequestMethod.GET) public String getUser(@PathVariable("id")...

    Spring中文帮助文档

    8.3.5. 常用注解 8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源...

    Spring3.2中文版.docx

    18. **基于HandlerMethod的控制器处理**:增强了对类注解控制器的支持,使得代码更清晰。 19. **条件化的@RequestMapping**:可以根据条件执行不同的请求映射,增强了路由的灵活性。 20. **Flash属性和...

    Spring API

    8.3.5. 常用注解 8.3.6. JUnit 3.8遗留支持 8.3.7. Spring TestContext Framework 8.3.8. PetClinic示例 8.4. 更多资源 II. 中间层数据访问 9. 事务管理 9.1. 简介 9.2. 动机 9.3. 关键抽象 9.4. 使用资源...

Global site tag (gtag.js) - Google Analytics