文档章节

Controller中的handler方法参数

AlphaGo
 AlphaGo
发布于 2016/03/13 22:59
字数 727
阅读 49
收藏 0

        今天继续看Spring MVC中16.3节(Implementing Controllers)的内容。


        由@RequestMapping注解的handler允许的方法参数中,包括Errors和BindingResult,这两个类是Spring的验证框架(validation)中的类。这个参数可以为参数列表中在其之前(紧挨,中间不能有其他Model参数,因为方法签名中可能不止有一个model对象,而Spring会为它们每一个都创建一个BindingResult对象)被@ModelAttribute绑定的model对象返回错误验证信息。

        

        这里提到了@ModelAttribute,此注解可以放在方法上或者方法参数列表中。

        添加在方法上表示此方法的目的是添加一个或多个model属性,它支持和@RequestMapping method一样的参数类型,但是不能直接映射请求。在同一Controller中,@ModelAttribute method会在@RequestMapping method之前被激活。  下面的例子是添加一个和添加多个属性的情况:  

//add one attribute
//the return type 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);
}

//add multiple attributes
public void populateModel(@RequestParam String number, Model model){
    model.addAttribute(accountManager.findAccount(number));
    // add more...
}

        在添加一个属性的情况下,如果没有明确指定属性名,那么就根据返回对象的类型默认为其指定属性名,如返回对象类型为Account,则属性名为account。


        @ModelAttribute添加在方法参数上

        


        另一个值得注意的是由@RequestBody注解的方法参数,该参数和HTTP request body绑定。将request body转换为方法参数需要借助于HttpMessageConverter(这里提到了MVC namespace,它默认注册了更多的message converters),这个类可以将HTTP request message转换为一个对象,也可将一个对象转换为HTTP response body。


        @RequestBody方法参数能够被@Valid注解,这样它就会被Validator验证。不同于@ModelAttribute参数,@RequestBody的验证错误总是会导致一个MethodArgumentNotValidException,此异常会被DefaultHandlerExceptionResolver处理,并向客户端返回400错误码。


        @ResponseBody和@RequestBody比较像,如果将这个注解放在方法上,表明此方法返回的内容将被直接写进HTTP response body中(不会被放到Model中,也不会被解析成视图名),如:

@RequestMapping(value="/something", method=RequestMethod.PUT)
@ResponseBody
public String helloWorld(){
    return "hello world!"
}

        上面的例子,"hello world!"这段文本会被写到HTTP response stream中。


        从请求中(包括request parameters、path variables、request headers、cookie values等)中提取的String-based值需要转换成他们绑定到的参数所属的类型,如果绑定到的参数不是String,Spring会自动将前面提到的那些值转换为合适的类型,所有的简单类型如int、long、Date等都是被支持的。也可以通过WebDataBinder或者FormattingConversionService进一步定制化这种转换。


© 著作权归作者所有

上一篇: Resolving Views
AlphaGo
粉丝 0
博文 9
码字总数 7769
作品 0
程序员
私信 提问
SpringMVC知识梳理(一)

什么是SpringMVC SpringMVC其实就是spring框架的一个模块,SpringMVC和spring之间可以无缝整合,SpringMVC也是一个非常优秀的基于MVC的web框架,什么是MVC这里就不多说了,下面来了解一下spr...

iHuawen
2017/12/28
0
0
K8S Ingress Controller 健康检查原理剖析

健康检查配置 我们知道K8S本身提供了Liveness和Readiness机制来对Pod进行健康监控,同样我们在部署K8S Ingress Controller时也配置了LivenessProbe和ReadinessProbe对其进行健康检查,具体配...

chenqz
2018/06/29
0
0
Spring framework MVC源码阅读笔记(一)

org.springframework.web.servlet.DispatcherServlet 下图来自Spring官方文档,MVC对请求的处理流程 上图中Front controller由DispatcherServlet充当,负责拦截和响应请求。实际请求的处理和...

第五郎
2016/09/14
28
0
从0开始写JavaWeb框架系列(7)从0开始写SamrtFrameWork:核心控制器的编写

一、编写前端核心请求转发器( 基于Servlet3.0以上版本 ) 1.1、从HttpServletRequest对象中获取请求方法和请求路径,通过ControllerHelper#getHandler方法来获取Handler对象。 1.2、当拿到Han...

AAASSSSddd
2016/05/27
77
0
Spring 3.x Web MVC

本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1142 Spring 3.x Web MVC Spring mvc 特点 @ 功能组件划分细致 @ 灵活、强大 @ 设计思想优秀 MVC框......

智慧点点
2018/08/26
10
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在做 Taro 适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 解决跨域问题 h5 发请求会报跨域问题,需...

dkvirus
50分钟前
3
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部