SpringMVC第二课
spring的各种传参
其它配置无需改变,添加一个Student类和修改HelloAction类即可
普通参数(GET、POST)、获取URI中的变量、请求头参数、作用域参数、Cookie参数、Java bean参数、 @ModelAttribute参数
package com.lanou3g.springmvc.web;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@Controller
@RequestMapping("/test")
public class TestController {
/**
* 提前初识化一些数据,在RequestMapping方法中,可以通过给方法参数添加@ModelAttribute来使用
* @return
*/
@ModelAttribute//有多个时可以后面加(" ")命名
public Map<String, String> prepareData() {
Map<String, String> data = new HashMap<>();
data.put("sname", "张四丰");
return data;
}
/**
* 获取请求中的普通参数(GET、POST)
* @param sname
* @param age
* @param gender
* @param model
* @return
*/
@RequestMapping("/param")//@RequestParam("")可加可不加
public String testRequestParam(@RequestParam("sname") String sname, @RequestParam("age") Integer age, Integer gender, Model model) {
model.addAttribute("sname", sname);
model.addAttribute("age", age);
log.debug("sname: " + sname + ", age: " + age+", gender: " + gender);
return "hello";
}
/**
* 获取URI中的变量,通常用于RESTFull服务
* @param sname
* @param age
* @param model
* @return
*/
@RequestMapping("/path_var/{sname}/{age}")//路径中的一部分作为参数
public String testPathVar(@PathVariable("sname") String sname,@PathVariable Integer age, Model model) {
model.addAttribute("sname", sname);
model.addAttribute("age", age);
log.debug("sname: " + sname + ", age: " + age);
return "hello";
}
/**
* 获取请求头参数
* @param sname
* @param model
* @return
*/
@RequestMapping("/header")
public String testReqHeader(@RequestHeader("sname") String sname, Model model) {
model.addAttribute("sname", sname);
log.debug("sname: " + sname);
return "hello";
}
/**
* 获取作用域参数
* @param sname
* @param model
* @return
*/
@RequestMapping("/attr")
public String testAttr(@SessionAttribute(value = "sname", required = false) String sname, Model model) {
model.addAttribute("sname", sname);
log.debug("sname: " + sname);
return "hello";
}
/**
* 获取Cookie参数
* @param sname
* @param model
* @return
*/
@RequestMapping("/cookie")
public String testCookie(@CookieValue("sname") String sname, Model model) {
model.addAttribute("sname", sname);
log.debug("sname: " + sname);
return "hello";
}
/**
* 测试@ModelAttribute作用
* @return
*/
@RequestMapping("/model_attr")
public String testModelAttr(@ModelAttribute Map<String, String> data, Model model) {
log.debug("model key: sname ->" + data.get("sname"));
model.addAttribute("sname", data.get("sname"));
return "hello";
}
//请求头: User-Agent: PostmanRuntime/7.15.0
@RequestMapping("/baidu")
public Object testFilterHeader(@RequestHeader("User-Agent") String userAgent) {
if(userAgent.startsWith("Postman")) {
return new ResponseEntity(HttpStatus.BAD_REQUEST);
}
return "hello";
}
/**
* 自动将请求中的参数封装到指定的java bean中
* 前台传的时候直接传各个属性和值即可,自动封装成对象
* @param student
* @param model
* @return
*/
@RequestMapping("/get_stu")
public String getStudent(Student student, Model model) {
System.out.println(model.getClass());
model.addAttribute("student", student);
return "student";
}
}