文章目录
一、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;
}