spring mvc中服务端获取http请求中的数据

服务端和客户端通过http协议进行通信

服务端可以接受客户端发来的http请求,并获取的请求行中的URL,Headers中的session,cookie,其他数据和Body中的数据

一.服务端从url获取数据

1.接收无参URL

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d1")
    public String noParameter() {
        return "无传递参数";
    }
}

2.接收含参URL

2.1 url包含单个参数

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d2")
    public String parameter(String p1) {
        return "收到参数p1:"+p1;
    }
}

2.2 url包含多个参数

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d3")
    public String parameters(String name, String age, String sex) {
        return "name:"+name + ",age:" + age + ",sex:"+sex;
    }
}

如果url传递了多个参数,服务端可以创建相应的对象来接收这些参数

public class PersonInfo {
    private String name;
    private int age;
    private String sex;
    public PersonInfo(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "PersonInfo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }
}
@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d3")
    public String parameters(PersonInfo personInfo) {
        return personInfo.toString();
    }
}

2.3.接收URL中的数组与集合

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d4")
    public String array(int[] arr) {
        return Arrays.toString(arr);
    }
}

服务端也可以用列表来接收url中的数组,不过要使用@RequestParam

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d4")
    public String array(@RequestParam("arr")List<String> list) {
        return list.toString();
    }
}

 3. 接收URL路径中的参数

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d5/{id}/{name}")
    public String getPathVariable(@PathVariable Integer id, @PathVariable String name) {
        return "id" +id+",name"+name;
    }
}

4.服务端的参数重命名

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d5")
    public String parameters(@RequestParam("who") String name, int age, String sex) {
        return "name:" + name + ",age:" + age + ",sex:" + sex;
    }
}

相当于把用who来接受张三这个值,然后把who的值再赋值给name

当然也不只有@RequestParam这个注解可以进行重命名

二.服务端Body中获取数据

 1 接收Body中文件

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d6")
    public String getFile(@RequestPart("file") MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        file.transferTo(new File("E:/myFile/"+fileName));
        return "接收到的文件名臣为" + fileName;
    }
}

上传文件

查看文件

 2.接收正文中的Body数据

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d6")
    public String json(@RequestBody PersonInfo personInfo) {
        return personInfo.toString();
    }
}


三.服务端从Headers获取数据

1 获取Headers中的Session与Cookie

1.1 获取Cookie

1.1.1通过HttpServletRequest获取
@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d7")
    public String getCookie(HttpServletRequest request, HttpServletResponse response) {
        Cookie[] cookies = request.getCookies();
        StringBuffer sb = new StringBuffer();
        if(cookies != null) {
            for(Cookie ck : cookies){
                sb.append(ck.getName()+":"+ ck.getValue());
            }
        }
        return "Cookie信息"+sb;
    }
}

设置Cookie

结果

1.1.2 通过注释获取
@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d8")
    public String getCookie(@CookieValue("lx") String cookie) {
        return cookie;
    }
}

1.2 Session的存储和读取

Session存储在服务端内,Cookie中存储着SessionId,通过Cookie中的SessionId可以找到当前服务端与客户端之间的会话

HttpSession getSession(boolean create),create默认为True,表示当会话不存在的时候创建会话,若为False,则返回null

创建会话时,服务端通过Set-Cookie将SessionId存在Cookie中

@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d9")
    public String setSession(HttpServletRequest request){
        HttpSession session = request.getSession();
        if(session != null) {
            session.setAttribute("lx","102202131");
        }
        return "session存储成功";
    }
    @RequestMapping("d10")
    public String getSession(HttpServletRequest request) {
        HttpSession session = request.getSession(false);
        String id = null;
        if(session != null && session.getAttribute("lx") != null) {
            id = (String) session.getAttribute("lx");
        }
        return "id:" + id;
    }
}

1.3 其他方式获取Session

1.3.1 通过注释获取Session
@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d11")
    public String getSession(@SessionAttribute(value = "lx",required = false) String id ) {
        return "id:" + id;
    }
}

1.3.2 通过HttpSession获取Session
@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d12")
    public String getSession(HttpSession session) {
        String id = (String) session.getAttribute("lx");
        return "id:" + id;
    }
}

2 获取Headers中的其他数据


@RestController
@RequestMapping("/test")
public class demo1 {
    @RequestMapping("/d13")
    public String getHeaders(HttpServletRequest request) {
        String userAgent = request.getHeader("user-agent");
        return userAgent;
    }
}

当然这里也可以获取cookie中的内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值