JAVAEE——SpringMVC第二讲接收各种类型的信息

文章目录

接收json数据

什么是json数据

想要搞明白接收json数据我们要先搞明白什么json数据是什么,其实json数据本质上还是一个字符串,只是这个字符串比较特殊,这个字符串表示的是一个对象,也就是说其实接收json数据本质上就是接收一个对象,那么我们需要对其创建一个类这个类中包含了我们要接收的数据的各种属性。

那么我们可以来看一下代码该如何编写

java 复制代码
package com.example.test_spring2.controller;

public class Person {
    String name;
    Integer id;

    public String getName() {
        return name;
    }

    public Integer getId() {
        return id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", id=" + id +
                '}';
    }
}
java 复制代码
  @RequestMapping("/m14")
    public  String m14(Person person){
        return person.toString();
    }

这时候可能有同学会有疑问那就是,这样子来看的话假如我们把url中的queryString中的顺序改变一下它还能匹配的上吗?

我们实验一下就可以知道了。

很明显即使我们的顺序进行了转换也依然是能够匹配的上的。

接收数组数据

接收数组数据或者说叫做集合数据,那么这种情况一般发生在那种状况呢?我们用postman来描绘一下此时的querystring

复制代码
http://127.0.0.1:8080/m13?name=520&name=zyfcl&name=zyficl3

假如说我们的url是这种形式我们可以发现我们的name不止一个值而是有很多的值并且我们希望这些值可以都被保存 起来这时候就是用到了数组类型的接收或者是集合类型的接收我们来看一下代码和结果展示

java 复制代码
@RequestMapping("/m13")
    public String m13(@RequestParam(required = false) List<String>name){
        return name.toString();
    }

接收session

接收session,想要接收session我们首先要知道session是什么,这里我们首先要明白一个问题,那就是假如说我们实现了一个登录界面这个登录界面我们输入了密码和用户名称,当我们登录完成后就会跳转到其他页面上,那么当跳转到其他页面上的时候其实也相当于我们的后端代码也要做出改变,举个简单的列子,假如说我们登录界面是和后端中的某个方法 。之后跳转界面我们可以认为在后端上其实就是跳转执行了一个方法那么上一个方法中的信息假如我们这个方法要用怎么办?那就是使用session将这个信息保存起来,这样就可以达到让下个方法也可以拿到这个信息了那么spring是怎么办到这个事情的呢?

首先我们先设置一个session

java 复制代码
    @RequestMapping("/setsession")
    public  String m16(HttpServletRequest request){
        HttpSession session=request.getSession(true);
        Person person=new Person();
        person.setId(10);
        person.setName("zyf");
        session.setAttribute("person",person);
        return "session设置完成";
    }

然后我们来得到这个session

java 复制代码
  @RequestMapping("/getsession")
    public String m15(@SessionAttribute(required = false)Person person){
            return person.toString();
    }

在这里我们得到了这个session我们也见到了新的注解名字叫做@SessionAttribute

@SessionAttribute

这个注解的作用就是用来修饰方法中的参数而被修饰的方法参数就绑定了session中的参数,也就是说这个参数会先在session中找一下看看能不能找到自己能得话就将自己赋值。

接收cookie

如何接受cookie呢?这里我们需要用到 的注解是@Cookievalue这个注解也是用来修饰参数的,使用如下假如说我们的cookie中有name参数那么我们应该如何获取呢?

java 复制代码
  @RequestMapping("/getCookie")
    public String m18(@CookieValue String name){
        return name;
    }

这个name名称必须与cookie中的参数名称相同

上传图片

上传图片我们需要用到的新的注解就是@RequestPart这个文件就是用来提交文件的那么我们来试一下

java 复制代码
    @RequestMapping("/file")
    public String getPart(@RequestPart MultipartFile multipartFile){
        System.out.println(multipartFile.getOriginalFilename());
        return "获取成功";
    }

获取headder

这里获取header的方法有两种这两种都比较简单第一种就是我们原生的servlet方式第二种就是用spring的注解

java 复制代码
@RequestMapping("/getheader")
    public String getHeader(HttpServletRequest request){
        String header=request.getHeader("User-Agent");
        return header;
    }

上面这样的是第一种

java 复制代码
    @RequestMapping("/getheader2")
    public String getHeader2(@RequestHeader("userAgent") String userAgent2){
        return userAgent2;
    }

返回静态页面

这里我们需要注意只有@Controller修饰的类里面的方法返回的才会被解析为是一个前端页面,而这个前端页面存在,在哪里呢?如下图

那么这时候就会有疑惑了如果这个个类加了@Controller这个注解的话那就会导致这个类里面的所有方法返回值都被修饰成了前端文件可是那有些方法不希望自己的返回被修饰呢?这就需要我们在这个方法加上下面的这个@ResponseBody注解那么代码如下

java 复制代码
   @RequestMapping("/returnHtml")
    public String getHtml(){
        return "/index.html";
    }

返回数据

返回数据我们就不多讲了上面已经返回的字符串其实就都是返回数据。

返回JSON

那么上面说了获取json那么该如何返回一个json呢?

首先看代码

java 复制代码
@Controller
@RequestMapping("return")
public class Return {
    @ResponseBody
    @RequestMapping("/retrunjson")
    public Person returnperson(){
        Person person=new Person();
        person.setName("user");
        person.setId(1);
        return person;
    }
}

然后看响应

当然也可以不使用@Controller注解

java 复制代码
@RestController
@RequestMapping("return")
public class Return {

    @RequestMapping("/retrunjson")
    public Person returnperson(){
        Person person=new Person();
        person.setName("user");
        person.setId(1);
        return person;
    }
}

设置headder

首先先看代码这里我们发现我们使用的是servlet的原生接口

java 复制代码
@ResponseBody
    @RequestMapping(value = "/r1",produces = "application/json;charset=utf8")
    public String h1(HttpServletResponse response){
        response.setHeader("myhead","myhead");
        return "{'OK':'1'}";
    }
相关推荐
哦虎!4 小时前
【JavaEE】网络初识
java
for_ever_love__4 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓5 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡5 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室6 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项6 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼6 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠6 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y6 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python