前后端交互模块

一、java对象和json格式的转换

1.1 JSON.stringify

  • 将数据转换为json格式的字符串

JSON格式数组

var stu = [{"name":"jack",age:23},{"name":"rose",age:56}]
undefined
var stu = JSON.stringify(stu)
undefined
stu
"[{"name":"jack","age":23},{"name":"rose","age":56}]"
var stu = JSON.parse(stu)
undefined
stu
(2) [{…}, {…}]0: {name: "jack", age: 23}1: {name: "rose", age: 56}length: 2__proto__: Array(0)
stu[0]
{name: "jack", age: 23}

1.2 JSON.parse

  • 将json格式的字符串转换为json格式数据

1.3 java集合和json格式互转

package com.example.demo.UserInfo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.example.demo.User.User;

import java.util.ArrayList;
import java.util.List;

public class Jsontest {
    public static void main(String[] args) {
        //普通json格式对象与javabean对象之间的互转
        User user = new User("[email protected]","123456");
        String string = JSON.toJSONString(user);
        System.out.println("bean对象转换为json格式字符串" + string);
        User user1 = JSON.parseObject(string, User.class);
        System.out.println("json格式转换为bean对象" + user1.toString());
        String str = "{\"email\":\"[email protected]\",\"pass\":\"123456\",\"id\":0}";
        User user2 = JSON.parseObject(str, User.class);
        System.out.println("json格式转换为bean对象" + user2.toString());
        String str2 = "{\"id\":2,\"email\":\"张三\",\"pass\":34}";
        User user3 = JSON.parseObject(str2, User.class);
        System.out.println(user3.toString());
        //json集合与javabean对象之间的转换
        ArrayList<String> strings = new ArrayList<>();
        strings.add("jack");
        strings.add("rose");
        strings.add("kitty");
        String string1 = JSON.toJSONString(strings);
        System.out.println(string1);
        String str1 = "[\"jack\",\"rose\",\"kitty\"]";
        JSONArray objects = JSON.parseArray(str1);
        String string11 = objects.toJSONString();
        System.out.println(objects);
        List lists = JSON.parseArray(string1, String.class);
        System.out.println(lists.toString());
    }
}

1.4 f复杂对象和json对象互转

package com.example.demo.UserInfo;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

public class JsonTest2 {
    public static void main(String[] args) {
        //复杂对象
        BigBean bigBean = new BigBean();
        String[] array = {"jack","rose","kitty"};
        bigBean.setList(Arrays.asList(array));
        bigBean.setArray(array);
        HashMap<String, String> stringStringHashMap = new HashMap<>();
        stringStringHashMap.put("name","张三");
        stringStringHashMap.put("age","23");
        bigBean.setMap(stringStringHashMap);
        bigBean.setDate(new Date());
        bigBean.setNum(23);
        String string = JSON.toJSONString(bigBean);
        System.out.println("复杂对象转换为json字符串" + string);
        JSONObject jsonObject = JSON.parseObject(string);
        System.out.println(jsonObject);
        //数组对象
        String[] array1 = {"jack","rose","kitty"};
        String string1 = JSON.toJSONString(array);
        List<String> strings = JSON.parseArray(string1, String.class);
        System.out.println("json格式数组格式转换为数组" + string1);
        //日期对象转换为json格式
        Date date = new Date();
        String string2 = JSON.toJSONString(date);
        System.out.println("日期格式转换为JSON字符串" + string2);
        Date parse = JSON.parseObject(string2, Date.class);
        System.out.println(parse);
    }
}

1.5 注意

  • java data转换成json字符串,变成毫秒表示,转换成java格式又正常显示
  • 集合和数组转换为json格式是一样的,且数组的json格式也会转换为集合对象
  • json格式对象可以转换成javabean对象

二、前后端数据匹配问题

2.1 前端传数据

  • 如果与后端对象数据格式一致,则会直接封装成对象
  form: {
                sname: this.form.name,
                birth: this.form.date,
                hobby: this.form.type.toString(),
                sex: this.form.resource,
                info: this.form.desc,
                email: this.form.email,
                phone: this.form.phone,
                address: this.form.address.toString()
              }
  • post方式传递数据,后端代码
  @CrossOrigin
    @RequestMapping(value = "/get/userinfo",method = RequestMethod.POST)
    public Result getUserInfo(@RequestBody Map<String,UserInfo> params, HttpServletResponse response) {
        response.setHeader("Access-Control-Allow-Origin","*");
        UserInfo form = params.get("form");
        //UserInfo userInfo = JSON.parseObject(form, UserInfo.class);
        System.out.println("form");
        System.out.println(form.toString());
        return new Result(Msg.UpdateUserInfoSuccess);
    }

2.1 前端在url中携带参数

http://localhost:8081/get/myname?name=123&email=12&pass=2&id=1212
  • 后端取参数
  • @RequestParam(“name”)
    根据里面的值取到字符串
  • 没有注解的实体类,比如user
    会根据字段自动将对应的属性的数据封装到user对象里面
  @RequestMapping(value = "/get/myname",method = RequestMethod.GET)
    public User getSth(@RequestParam("name")String name,User user){
        System.out.println(name);
        System.out.println(user.toString());
        return new User("张三","23232",3);
    }
  • 结论

@RequestParam(“name”)方式,如果有多个同名的参数,会拼接到后面
无注解的对象方式,如果有多个同名的参数,会取最前面的一个
无注解的普通类型方式,如果有多个同名的参数,会拼接到后面

2.2 在请求头中带参数

在这里插入图片描述

  • 后端获取请求头中的数据
   @RequestMapping(value = "/get/header",method = RequestMethod.GET)
    public User getSth(HttpServletRequest request){
        String header = request.getHeader("name");
        System.out.println(header);
        return new User("张三","23232",3);
    }

* 注解方式

 @RequestMapping(value = "/get/header",method = RequestMethod.GET)
    public User getSth1(@RequestHeader("name")String name){
        System.out.println(name);
        return new User("张三","23232",3);
    }

2.3 请求体中携带参数

  • postman发送数据
{
	"name": "123",
	"list": ["11", "222", "33"],
	"user": {
		"email": "pass",
		"pass": "232",
		"id": "12"
	}
}
  • java后台接受
    @RequestMapping(value = "/post/sth",method = RequestMethod.POST)
    public User getSth1(@RequestBody Map<String,Object> map){
        //String name = map.get("name");
        LinkedHashMap user = (LinkedHashMap)map.get("user");
        System.out.println(user.toString());
        ArrayList list1 = (ArrayList)map.get("list");
        System.out.println(list1.toString());
        String name = (String)map.get("name");
        System.out.println(name.toString());
        //System.out.println(name);
        System.out.println(user.toString());
        return new User("张三","23232",3);
    }
  • 注意:对象类型会被接受为LinkedHashMap类型
  • 没有注解不能接受请求体中的参数
   @RequestMapping(value = "/post/sth",method = RequestMethod.POST)
    public User getSth1(User user,String name){
        System.out.println(name);
        System.out.println(user.toString());
        return null;
    }
  • 直接以对象格式接收参数
{
		"email": "pass",
		"pass": "232",
		"id": "12"
}
 @RequestMapping(value = "/post/sth",method = RequestMethod.POST)
    public User getSth1(@RequestBody User user){
        System.out.println(user.toString());
        return null;
    }

猜你喜欢

转载自blog.csdn.net/qq_42306803/article/details/104756004