SpringMVC第二课(传参)

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";
    }

}

猜你喜欢

转载自blog.csdn.net/csdn_hmt/article/details/94546186