概述
@Controller(类)
标记这个类是Handler处理器,即MVC中的C部分。
@RequestMapping映射请求(方法)
Spring MVC使用@RequestMapping注解来为@Controller指定可以处理哪些URL请求;在@Controller的类定义、方法定义处均可使用该注解:
①类定义处:提供初步的请求映射信息,相对于WEB应用的根目录;
②方法定义处:提供更进一步的细分映射信息,相对于类定义处的URL;若类定义处未标注@RequestMapping,则方法处标记的URL就相对于WEB应用的根目录;
当DispatcherServlet截获请求后,就通过@Controller上的@RequestMapping提供的URL映射信息来确定请求所对应的处理方法;
@RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数、请求头来映射请求;@RequestMapping的value、method、params、headers分别表示请求URL、请求方法、请求参数、请求头的映射条件,他们之间是“与&”的关系,可以联合使用多个条件来让请求映射更加精确化;
params和headers支持简单的表达式,常用方法如下:
①param1:表示请求中必须包含名为param1的请求参数;
②!param1:表示请求中不能包含名为param1的请求参数;
③param1 != value1:表示请求包含名为param1的请求参数,但其值不能为value1;
④{“param1=value1”,”param2”}:表示必须包含名为param1和param2的2个请求参数,且param1参数的值必须为value1;
个人觉得,@RequestMapping可以基本映射HTTP请求的所有属性,个人建议先把HTTP协议了解清楚,或者借用浏览器的F12监控下HTTP请求也可以;
至于value属性来映射请求URL,@RequestMapping注解还有更多的方式来映射:
①支持Ant风格资源地址支持3种匹配符,例如:
?:匹配文件名中的一个字符;
*:匹配文件名中的任意字符;
**:匹配多层路径;
②还支持Ant风格的URL,例如:
/org/*/create:匹配/org/任意数量字符/create;
/org/**/create:匹配/org/任意层级路径/create;
/org/create??:匹配/org/任意以create开头的字符串;
@PathVariable映射URL绑定的占位符(入参)
带占位符的URL是Spring3.0新增的功能,在Spring MVC向REST目标过滤时具有关键作用;通过@PathVariable可以将URL中占位符参数绑定到@Controller类的处理方法的入参中,即URL中的{xxx}占位符可以通过@PathVariable(“xxx”)直接绑定到操作方法的入参中,例如:
@RequestMapping(“/org/{orgcode}”) Public Org getOrgById( @PathVariable(“orgcode”) String orgcode){ 编写业务逻辑,这里orgcode就是通过URL传入的参数,可以直接拿来使用 } |
注意:@PathVariable中的占位符,要与URL中的占位符完全一致;
为了让浏览器的<form/>支持delete与put请求,Spring3.0新增了一个HiddenHttpMethodFilter过滤器,从而让form表达支持get、post、delete、put请求;下面是该过滤器关键代码:
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { HttpServletRequest requestToUse = request; if ("POST".equals(request.getMethod()) && request.getAttribute("javax.servlet.error.exception") == null) { String paramValue = request.getParameter(this.methodParam); if (StringUtils.hasLength(paramValue)) { String method = paramValue.toUpperCase(Locale.ENGLISH); if (ALLOWED_METHODS.contains(method)) { requestToUse = new HiddenHttpMethodFilter.HttpMethodRequestWrapper(request, method); } } } filterChain.doFilter((ServletRequest)requestToUse, response); } |
<input type=”hidden” name=”_method”>
@RequestParam绑定请求参数值(入参)
Spring MVC通过分析处理方法的签名,将HTTP请求中被映射的信息绑定到处理方法对应的入参中;Spring MVC对@Controller中处理方法的签名限制是很宽松的,几乎可以按喜欢的任何方式来对方法进行签名,也正因为比较宽松,必要时可以对方法、方法入参来标注@PathVariable、@RequestParam、@RequestHeader等注解,届时Spring MVC会将HTTP请求信息绑定到对应的方法入参中,并根据方法的返回值类型作出相应的后续处理;
在处理方法入参时使用@RequestParam则可以把请求参数传递给请求方法,其中value属性表示参数名,required属性表示是否必须,该属性默认为true,表示请求参数中必须包含对应的参数,如不存在,则抛出异常;defaultValue属性指定默认值,当对应的value没有时,可以配置该属性;
@RequestHeader绑定请求头的属性值(入参)
请求头包含了若干个属性,服务器可据此来获知客户端的值,通过@RequestHeader来把请求头中的属性值绑定到处理方法的入参中;
@CookieValue绑定请求中的Cookie值(入参)
@CookieValue可以让处理方法的入参绑定到某个Cookie值;
使用POJO对象绑定请求参数值(入参)
Spring MVC会按照请求参数名与POJO的属性名进行自动匹配,自动为该对象填充属性值,且支持级联属性;(之前的时候,这项工作是Struts来完成填充)
直接把POJO对象作为入参即可,不需要任何注解来注解该POJO;
直接传入Servlet API类型的参数(入参)
Handler方法可以直接接受如下Servlet API类型的参数:
HttpServletRequest/HttpServletResponse
HttpSession/java.security.Principal
Locale/InputStream/OutputStream/Reader/Writer
与POJO一样,不需要任何注解,可以直接作为方法入参;
请求/响应的Json格式
SpringMVC3.0以后新增HttpMessageConverter<T>接口,该接口负责将请求信息转换为一个对象(类型为T),或者将对象(类型为T)输出位响应信息;
使用HttpMessageConverter<T>将请求信息转化并绑定到处理方法的入参中或者将响应结果转化为对应类型的响应信息中,Spring提供了2种途径:
①使用@RequestBody/@ResponseBody对处理方法的进行注解;
②使用HttpEntity<T>/ResponseEntity<T>作为处理方法的入参或返回值;
当控制器处理方法使用到@RequestBody/@ResponseBody或HttpEntity<T>/ResponseEntity<T>时,Spring首先根据请求头或者响应头的Accept属性来选择匹配的HttpMessageConverter,进而根据参数类型或泛型类型的过滤得到匹配的HttpMessageConverter,若找不到可用的HttpMessageConverter则抛出异常;
@RequestBody与@ResponseBody不需要成对出现;
@RequestBody用于注解入参,@ResponseBody用于注解类、方法;
最后
以上就是曾经航空为你收集整理的基础2-MVC注解映射请求、请求参数、请求头@Controller(类)@RequestMapping映射请求(方法)@PathVariable映射URL绑定的占位符(入参)@RequestParam绑定请求参数值(入参)@RequestHeader绑定请求头的属性值(入参)@CookieValue绑定请求中的Cookie值(入参)使用POJO对象绑定请求参数值(入参)直接传入Servlet API类型的参数(入参)请求/响应的Json格式的全部内容,希望文章能够帮你解决基础2-MVC注解映射请求、请求参数、请求头@Controller(类)@RequestMapping映射请求(方法)@PathVariable映射URL绑定的占位符(入参)@RequestParam绑定请求参数值(入参)@RequestHeader绑定请求头的属性值(入参)@CookieValue绑定请求中的Cookie值(入参)使用POJO对象绑定请求参数值(入参)直接传入Servlet API类型的参数(入参)请求/响应的Json格式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复