基本介绍
SpringBoot 接收客户端提交数据/参数会使用到相关注解。
@PathVariable
、 @RequestHeader
、 @ModelAttribute
、 @RequestParam
、 @MatrixVariable
、@CookieValue
、@RequestBody
应用实例
演示各种方式提交数据/参数给服务器,服务器如何使用注解接收。
创建 src/main/resources/public/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
基本注解:
<hr/>
<a href="/monster/200/jack">@PathVariable-路径变量 monster/200/jack</a><br/><br/>
<a href="/requestHeader">@RequestHeader-获取Http请求头 </a><br/><br/>
<a href="/hi?name=lzw&fruit=apple&fruit=pear&id=300&address=郑州">@RequestParam-获取请求参数</a><br/><br/>
<a href="/cookie">@CookieValue-获取cookie值</a><br/><br/>
<a href="/login">@RequestAttribute-获取request域属性-</a>
<hr/>
<h1>测试@RequestBody获取数据: 获取POST请求体</h1>
<form action="/save" method="post">
姓名: <input name="name"/> <br>
年龄: <input name="age"/> <br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
创建 src/main/java/com/lzw/springboot/controller/ParameterController.java
package com.lzw.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
/**
* @author LiAng
*/
@RestController
public class ParameterController {
/**
* /monster/{id}/{name} 解读
* 1. /monster/{id}/{name} 构成完整请求路径
* 2. {id} {name} 就是占位变量
* 3. @PathVariable("name"): 这里name 和{name} 命名保持一致
* 4. String name_ 这里自定义,
* 5. @PathVariable Map<String, String> map 把所有传递的值传入map
* 6. 可以看下@PathVariable源码
*/
@GetMapping("/monster/{id}/{name}")
public String pathVariable(@PathVariable("id") Integer id,
@PathVariable("name") String name,
@PathVariable Map<String,String> map
){
System.out.println("id: " + id);
System.out.println("name: " + name);
System.out.println("map: " + map);
return "success";
}
/**
* @RequestHeader("Host") 获取http请求头的 host信息
* @RequestHeader Map<String, String> header: 获取到http请求的所有信息
*/
@RequestMapping("/requestHeader")
public String requestHeader(@RequestHeader("Host") String host,
@RequestHeader Map<String,String> header,
@RequestHeader("accept") String accept){
System.out.println("host: " + host);
System.out.println("header: " + header);
System.out.println("accept: " + accept);
return "success";
}
/**
* 如果希望将所有的请求参数的值都获取到,可以通过
* @RequestParam Map<String, String> paras 获取
*/
@GetMapping("/hi")
public String hi(@RequestParam(value = "name") String username,
@RequestParam("fruit") List<String> fruits,
@RequestParam Map<String, String> paras) {
System.out.println("username-" + username);
System.out.println("fruit-" + fruits);
System.out.println("paras-" + paras);//paras-{name=lzw, fruit=apple, id=300, address=郑州}
return "success";
}
/**
* 因为我的浏览器目前没有cookie,我们可以自己设置cookie[技巧还是非常有用]
* 如果要测试,可以先写一个方法,在浏览器创建对应的cookie
* 说明 1. value = "cookie_key" 表示接收名字为 cookie_key的cookie
* 2. 如果浏览器携带来对应的cookie , 那么 后面的参数是String ,则接收到的是对应对value
* 3. 后面的参数是Cookie ,则接收到的是封装好的对应的cookie
*/
@GetMapping("/cookie")
public String cookie(@CookieValue(value = "cookie_key", required = false) String cookie_value,
@CookieValue(value = "username",required = false) Cookie cookie,
HttpServletRequest request){
System.out.println("cookie_value-" + cookie_value);
if (cookie != null) {
System.out.println("username-" + cookie.getName() + "-" + cookie.getValue());
}
System.out.println("-------------------------");
Cookie[] cookies = request.getCookies();
for (Cookie cookie1 : cookies) {
System.out.println(cookie1.getName() + "=>" + cookie1.getValue());
}
return "success";
}
/**
* @RequestBody 是整体取出Post请求内容
*/
@PostMapping("/save")
public String postMethod(@RequestBody String content) {
System.out.println("content-" + content);
return "success";
}
}
创建 src/main/java/com/lzw/springboot/controller/RequestController.java
package com.lzw.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
/**
* @author LiAng
*/
@Controller
public class RequestController {
@GetMapping("/login")
public String login(HttpServletRequest request){
request.setAttribute("user","LiAng");//向request域中添加的数据
request.getSession().setAttribute("website", "http://www.baidu.com"); //向session中添加数据
return "forward:/ok"; //请求转发到 /ok
}
@GetMapping("/ok")
@ResponseBody
public String ok(
HttpServletRequest request,
@SessionAttribute(value = "website", required = false) String website,
@RequestAttribute(value = "user", required = false) String username
) {
//获取到request域中的数据
System.out.println("username-" + username);
System.out.println("通过servlet api 获取 username-" + request.getAttribute("user"));
System.out.println("website-" + website);
System.out.println("通过servlet api 获取 website-" + request.getSession().getAttribute("website"));
return "success";
}
}
复杂参数
基本介绍
- 在开发中,SpringBoot 在响应客户端请求时,也支持复杂参数。
- Map、Model、Errors/BindingResult、RedirectAttributes、ServletResponse、SessionStatus、 UriComponentsBuilder、ServletUriComponentsBuilder、HttpSession。
- Map、Model 数据会被放在 request 域, 底层 request.setAttribute()。
- RedirectAttributes 重定向携带数据。
应用实例
修改 src/main/java/com/lzw/springboot/controller/RequestController.java
package com.lzw.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
* @author LiAng
*/
@Controller
public class RequestController {
//响应一个注册请求
@GetMapping("/register")
public String register(Map<String,Object> map,
Model model,
HttpServletResponse response){
//如果一个注册请求,会将注册数据封装到map或者model
//map中的数据和model的数据,会被放入到request域中
map.put("user","lzw");
map.put("job","java架构师");
model.addAttribute("sal", 80000);
//我们演示创建cookie,并通过response 添加到浏览器/客户端
Cookie cookie = new Cookie("email", "lzw@qq.com");
response.addCookie(cookie);
//请求转发
return "forward:/registerOk";
}
@ResponseBody
@GetMapping("/registerOk")
public String registerOk(HttpServletRequest request) {
System.out.println("user-" + request.getAttribute("user"));
System.out.println("job-" + request.getAttribute("job"));
System.out.println("sal-" + request.getAttribute("sal"));
return "success";
}
}
自定义对象参数-自动封装
基本介绍
- 在开发中,SpringBoot 在响应客户端请求时,也支持自定义对象参数。
- 完成自动类型转换与格式化。
- 支持级联封装。
应用实例
演示自定义对象参数使用,完成自动封装,类型转换。
创建 src/main/resources/public/save.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加妖怪</title>
</head>
<body>
<h1>添加妖怪-坐骑[测试封装POJO;]</h1>
<form action="/savemonster" method="post">
编号: <input name="id" value="100"><br/>
姓名: <input name="name" value="牛魔王"/> <br/>
年龄: <input name="age" value="500"/> <br/>
婚否: <input name="isMarried" value="true"/> <br/>
生日: <input name="birth" value="2000/11/11"/> <br/>
坐骑名称:<input name="car.name" value="法拉利"/><br/>
坐骑价格:<input name="car.price" value="9999.9"/>
<input type="submit" value="保存"/>
</form>
</body>
</html>
创建 src/main/java/com/lzw/springboot/bean/Car.java
package com.lzw.springboot.bean;
import lombok.Data;
/**
* @author LiAng
*/
@Data
public class Car {
private String name;
private Double price;
//xxxx对象属性
}
创建 src/main/java/com/lzw/springboot/bean/Monster.java
package com.lzw.springboot.bean;
import lombok.Data;
import java.util.Date;
/**
* @author LiAng
*/
@Data
public class Monster {
private Integer id;
private String name;
private Integer age;
private Boolean isMarried;
private Date birth;
private Car car;
}
修改 src/main/java/com/lzw/springboot/controller/ParameterController.java
//处理添加monster的方法
@PostMapping("/savemonster")
public String saveMonster(Monster monster) {
System.out.println("monster-" + monster);
return "success";
}
点击保存,看后台输出。
原文地址:http://www.cnblogs.com/liangnice/p/16859371.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性