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":"男"}