文章目录
接收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'}";
}