03-SpringMVC-获得用户请求数据

一、处理requet uri 部分:@PathVariable

  • @PathVariable是Spring3.0新增的功能
  • 通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的传入参数中。源码如下

  • URL中的{xxx}点位符,通过@PathVariable("xxx")绑定到操作方法中的传入参数

1、测试

  • 控制器
@RequestMapping("/testPathVariable/{id}")public String testPathVariable(@PathVariable("id") Integer id){System.out.println("PathVariable  "+id);return "success";}
  • 请求
<a href="requestData/testPathVariable/2">测试 @PathVariable</a>

2、总结

  • @RequestMapping("/testPathVariable/{id}")也可以放在类上面,如下所示
@[email protected]("/owners/{ownerId}")public class RelativePathUriTemplateController {  @RequestMapping("/pets/{petId}")  public void findPet(@PathVariable String ownerId, @PathVariable String petId, Model model) {        // implementation omitted  }}

那么它对应的请求:/owers/1/pets/2

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

二、处理request header部分@RequestHeader, @CookieValue

1、@RequestHeader

1.1 知识点

  • 请求头,包含了若干属性,服务器可据此获知客户端的信息(可以通过firebug来查看)

  • 通过@RequestHeader即可将请求头的属性值绑定到处理方法的传入参数中。源码如下

1.2 测试

  • 控制器类
@RequestMapping("/testRequestHeader")public String testRequestHeader(@RequestHeader(value="Accept-Language") String al){System.out.println("Accept-Language:"+al);return "success";}
  • 请求
<a href="requestData/testRequestHeader">测试@RequestHeader</a>

2、使用@CookieValue绑定请求中的Cookie值

2.1、知识点

  • 查看Cookie

  • @CookieValue可以处理方法传入绑定某个Cookie值

2.2 测试

  • 测试类
@RequestMapping("/testCookieValue")public String testCookieValue(@CookieValue(value="JSESSIONID") String jSession){System.out.println("JSESSIONID:"+jSession);return "success";}
  • 请求
<a href="requestData/testCookieValue">测试@CookieValue</a>

三、处理request body部分的注解:@RequestParam,  使用POJO对象绑定请求参数值;

1、使用@RequestParam绑定请求参数值

1.1 知识点

  • 源代码

  • 在处理方法的传入参数处,使用@RequestParam可以把请求参数传递给方法

    • value:参数名
    • required:是否必须,默认为true,表示参数中必须包含对应的参数,若不存在,将抛出异常。
    • defaultValue:请求参数的默认值

1.2、测试

  • 控制器类
@RequestMapping("/testRequestParam")public String testRequestParam(@RequestParam(value="userName",required=false) String userName,@RequestParam(value="age",defaultValue="20") int age,@RequestParam(value="password") String password){System.out.println("userName:"+userName);System.out.println("age:"+age);System.out.println("password:"+password);return "success";}
  • 请求
<a href="requestData/testRequestParam">测试@RequestParam(没有传值)</a><br><a href="requestData/testRequestParam?userName=imentors&password=123456">测试@RequestParam(传值)</a>

2、使用POJO对象绑定请求参数值

2.1、 知识点

  • SpringMVC会按请求参数名和POJO属性名进行自动匹配,自动为该对象填充属性值
  • 支持级联属性。如dept.deptId、dept.address.tel

2.2 、测试

  • bean
public class Address {private String province;private String city;@Overridepublic String toString() {return "Address [province=" + province + ", city=" + city + "]";}}
public class User {private String username;private String password;private String email;private int age;@Overridepublic String toString() {return "User [username=" + username + ", password=" + password+ ", email=" + email + ", age=" + age + ", address=" + address+ "]";}}
  • 控制器
@RequestMapping("/testPojo")public String testPojo(User user){System.out.println("testPOJO:"+user);return "success";}
  • 请求
<form action="requestData/testPojo" method="post">  		username:<input type="text" name="username"/>  		<br/>  		password:<input type="password" name="password"/>  		<br/>  		email:<input type="text" name="email"/>  		<br/>  		age:<input type="text" name="age"/>  		<br/>  		city:<input type="text" name="address.city"/>  		<br/>  		province:<input type="text" name="address.province"/>  		<br/>  		<input type="submit" value="提交"/>  	</form>

2.3 总结


  • 如果请求的表单参数中不存在pojo对象中的某个域名称的项目,则绑定后pojo该属性为null。
  • 如果请求的表单参数中存在pojo对象中没有包含的域的项目,则绑定后该参数丢失。
  • 如果表单项目的数据会自动从String转换为相应pojo的域类型。但如果类型无法转换,则报错。如果我输入age为dafsdfa,那么报错。

四、使用servlet api对象作为入参

1、使用servlet api对象作为入参

1.1、知识点

  • 使用servlet api类作为入参时,spring mvc会自动将web层对应的servlet API对象传递给处理方法入参,处理方法入参可同时使用其它符合要求的入参,位置顺序无特殊要求。
  • 如果处理方法自行使用HttpServletResponse返回响应,则处理方法返回值需设置成void.
  • Spring mvc在org.springframework.web.context.request包下提供了若干个可代理Servlet原生API类的接口

1.2 测试

  • 控制器
@RequestMapping("/testServletApi")public String testServletApi(HttpServletRequest request,HttpServletResponse response){System.out.println("testServletAPI:"+request+","+response);return "success";}
  • 请求
<a href="requestData/testServletApi">测试ServletApi</a>

1.3 总结

可以使用Servlet原生的Api作为目标方法的参数,具体支持以下类型

  • HttpServletRequest
  • HttpServletResponse
  • HttpSession
  • Java.security.Principal
  • InputStream
  • OutputStream
  • Reader
  • Writer

关注我们

    师享空间的宗旨是分享知识,传播价值。关注我们,及时获得更多信息。




捐赠我们
    如果您对我们的成果表示认同并且觉得对你有所帮助,欢迎您对我们捐赠^_^。

时间: 2024-10-27 19:31:08

03-SpringMVC-获得用户请求数据的相关文章

Django Restful Framework【第四篇】版本、解析器、序列化和请求数据验证

一.版本 程序也来越大时,可能通过版本不同做不同的处理 没用rest_framework之前,我们可以通过以下这样的方式去获取. class UserView(APIView): def get(self,request,*args,**kwargs): version = request.query_params.get('version') print(version) if version=='v1': #如果版本是v1 ret = { 'code':111, 'msg':'版本一的内容'

序列化-请求数据校验。。。。。。

序列化 拿到所有的角色数据 1.urls.py 2.models.py  假设只有3个角色 3.views.py from api import models import json json只能序列化python的基本数据类型!!!! QueryDict是django定义的类!!!! 所以以下这种操作会报错!!! 4.解决方案:取某个字段,然后转成list数据,再转成json数据. 返回数据:注意汉字都变成字节码了!!! 5.显示中文  ensure_ascii=False json序列化方法

Android(或者Java)通过HttpUrlConnection向SpringMVC请求数据(数据绑定)

问题描述 当我们使用SpringMVC作为服务端的框架时,有时不仅仅要应对web前端(jsp.javascript.Jquery等)的访问请求,有时还可能需要响应Android和JavaSE(桌面应用)这些客户端的请求,因此,除了web使用form表单或者ajax作为客户端获取Controller响应之外,纯Java语言向SpringMVC的Controller提供参数和请求结果也是必须要实现的.web前端使用form和ajax来获取Controller响应在本篇博客暂不深究,本篇博课着力于实现

SpringMVC中用于绑定请求数据的注解以及配置视图解析器

SpringMVC中用于绑定请求数据的注解 在上一篇文章中我们简单介绍了@RequestMapping与@RequestParam注解,知道了如何去配置地址映射,本篇则介绍一些用于处理request数据的注解. [email protected]注解,该注解用于处理request中的header部分,也就是http请求头的部分,它可以把header部分的值绑定到方法的参数上,示例: package org.zero01.test; import org.springframework.stere

(九)springmvc之json的数据请求(客户端发送json数据到服务端)

index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd&quo

controller获取客户端请求数据

在学习SpringMVC之前,客户端的请求数据一般是靠request的getParameter方法获取,获取到的数据类型为String类型,需要强制转换为需要的数据类型. 在controller中也可以用这种方式获取客户端数据. //浏览器访问路径为http://127.0.0.1:8001/web02/request?name=name @RequestMapping(path = "/request", method = RequestMethod.GET) public Mode

学习SpringMVC——如何获取请求参数

@RequestParam @PathVariable @QueryParam @CookieValue @ModelAndView @ModelAttribute 一.spring mvc如何匹配请求路径--"请求路径哪家强,RequestMapping名远扬" @RequestMapping是用来映射请求的,比如get请求,post请求,或者REST风格与非REST风格的. 该注解可以用在类上或者方法上,如果用于类上,表示该类中所有方法的父路径. @Controller的注解,该注

http请求数据的格式

最近看了tinyhttpd的服务器代理,看了看http请求数据包的格式和内容 http请求报包含三个部分: 请求行 + 请求头 + 数据体 请求行包含三个内容 method + request-URI + http-version method 包含有 post , get, head,delete, put, connect, options, patch, propfind, propatch, mkcol, copy, move, lock, unlock, trace, head 方法:

SpringMVC服务端返回数据

下面介绍controller向jsp页面传递数据的几种方式 请求转发 1.在学习MVC之前,用request的setAttribute方法传递数据 @RequestMapping("/response") public ModelAndView sendData01(HttpServletRequest request) { ModelAndView mav = new ModelAndView("result"); request.setAttribute(&qu