我正在参加「掘金·启航计划」
创建项目和HTML页面进行代码测试
选用springboot项目为例,在src/main下创建webapp文件夹,在下面创建HTML页面进行js代码测试
如何生成webapp文件夹? 点击-->创建webapp文件夹
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8" >
<title>Title</title>
</head>
<body>
<script type="text/javascript" >
//编写一个JS对象
var user={
name: "魏一鹤" ,
age:23,
sex: "男"
};
//输出一个这个JS对象
console.log(user); //{age: "23",name: "魏一鹤",sex: "男"}
//将JS对象转换为JSON字符串
var json = JSON.stringify(user);
console.log(json) //{"name":"魏一鹤","age":"23","sex":"男"}
//将JSON字符串转换为JS对象
var js=JSON.parse(json);
console.log(js);
</script>
</body>
</html>
趣味代码 扒百度源码
后面加上wd参数就是我们输入的内容和请求结果
和我们在网页搜索框输入动态变化是类似的
controller发送请求接收返回json
现在两大转换json第三方工具主流就是jackson和fastjson(阿里巴巴)
1 引入jackson依赖(jar包)
<!--jackson依赖 用来转化json-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.8</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.0.RELEASE</version>
</dependency>
2 创建实体和controller
实体代码如下 toString 无参无参构造 getset
package com.wyh.entity;
/**
* @program: SpringBoot-Ajax-JSON
* @description: User实体类
* @author: 魏一鹤
* @createDate: 2022-02-07 21:45
**/
public class User {
private String name;
private int age;
public User() {
}
@Override
public String toString() {
return "User{" +
"name='" + name + ''' +
", age=" + age +
", sex='" + sex + ''' +
'}' ;
}
public User(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
private String sex;
}
3 创建controller并且写方法请求并使用jackson进行json格式转化
@ResponseBody注解是spring提供的,直接处理返回JSON字符串就行
jackson主要处理对象的JSON数据格式
JSON对象数据格式,以"[]"进行包裹,每个对象用","进行分隔并且用"{}"括起来,最后一个数据没有","分隔
[{"name":"魏一鹤","age":1,"sex":"男"},{"name":"杨玉婷","age":2,"sex":"女"}]
package com.wyh.controller;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.wyh.entity.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @program: SpringBoot-Ajax-JSON
* @description: 用户中心控制器 返回接收JSON格式的数据
* @author: 魏一鹤
* @createDate: 2022-02-07 21:44
**/
@Controller
public class UserController {
//现在两大转换json第三方工具主流就是jackson和fastjson(阿里巴巴)
//如果出现乱码,我们需要设置他的编码格式为utf-8,以及它返回的类型,通过@RequesMapping的produces属性来实现
//produces:指定响应体返回类型和编码
@RequestMapping(value = "/json1" ,produces = "application/json;charset=utf-8" )
//正常返回的话会走视图解析器,但是json需要返回的是字符串,使用@ResponseBody就能完美解决
@ResponseBody //响应 返回json格式的数据 将服务器端返回的对象转换为json对象响应回去
//@RequestBody //接收 接收json格式的数据 将客户端返回的对象转换为json进行接收
public String json1() throws JsonProcessingException {
//需要一个jackson的对象映射器 其实就是一个类 ObjectMapper 使用它可以直接将对象转换为json字符串
ObjectMapper objectMapper = new ObjectMapper();
//创建一个对象
User user=new User( "魏一鹤" ,1, "男" );
//输出Java对象
System.out.println( "Java对象" +user);
//将Java对象转换为JSON字符串 使用writeValueAsString方法把实体放进去即可转化json字符串 需要抛出异常
String JSONUser = objectMapper.writeValueAsString(user);
//输出JSON字符串
System.out.println( "JSON字符串" +JSONUser);
//由于使用了@ResponseBody注解 这里会将JSONUser以JSON字符串的格式直接返回 十分方便
return JSONUser;
}
}
@RequestMapping(value = "/json2" )
@ResponseBody
public String json2() throws JsonProcessingException {
List<User> list=new ArrayList<>();
User user1=new User( "魏一鹤" ,1, "男" );
User user2=new User( "杨玉婷" ,2, "女" );
list.add(user1);
list.add(user2);
ObjectMapper objectMapper = new ObjectMapper();
String strJSON = objectMapper.writeValueAsString(list);
return strJSON;
}
测试发现正常返回json字符串
输出如下
Java对象User{name='魏一鹤', age=1, sex='男'}
JSON字符串{"name":"魏一鹤","age":1,"sex":"男"}
-
项目启动保错(jackson版本问题导致项目启动失败)
出现这个错误是因为jackson依赖和springboot依赖版本有冲突,把jsckson的依赖版本从2.9.8换成 2.11.0即可