对于很多时候,都是使用前后端分离的形式来写的接口,所以对于数据返回的规定是必不可少的,在我们日常的开发中这部分的使用还是很必要的
另外一点,在返回参数或者其他业务中,有时候遇到实体和json的转换也是很头疼,所以整合了一下这部分的内容。
接口返回结果封装
添加Result类
在util包中添加类Result
import java.io.Serializable;
import java.util.List;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Data;
/**
* json结果集
*/
@Data
public class Result implements Serializable {
// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
// 响应业务状态
private Integer status;
// 响应消息
private String msg;
// 响应中的数据
private Object data;
public Result() {
}
public Result(Integer status, String msg, Object data) {
this.status = status;
this.msg = msg;
this.data = data;
}
public Result(Object data) {
this.status = 1;
this.msg = "OK";
this.data = data;
}
public static Result ok() {
return new Result(null);
}
public static Result ok(Object data) {
return new Result(data);
}
public static Result build(Integer status, String msg) {
return new Result(status, msg, null);
}
public static Result build(Integer status, String msg, Object data) {
return new Result(status, msg, data);
}
}
在controller中的修改
主要是对接口的返回值类型做一个修改,并且对返回的参数做一个封装
@RestController
@Api(tags = "用户操作")
public class UserController {
@Autowired
private UserDao userDao;
@GetMapping("/users")
@ApiOperation(value = "获取用户列表", notes = "获取所有的user信息")
public Result getUserList() {
List<User> userList = userDao.getUserList();
return Result.ok(userList);
}
}
启动去swagger中测试,发现我们的结果返回已经成了json的形式
对于Result的引入还是很简单的
Result提供的几个方法
构造方法:
public Result(Integer status, String msg, Object data)
对于200的请求,我们会返回code、msg和data
public Result(Object data)
封装了200返回的请求,data就是返回的数据,为了方便所以封装了这个构造函数
静态方法:
public static Result ok()
不包含返回data的200请求
public static Result ok(Object data)
包含返回data的200请求
public static Result build(Integer status, String msg)
使用Result.build来调用,返回值包括status和msg,不需要再去手动实例化
public static Result build(Integer status, String msg, Object data)
使用Result.build来调用,返回值包括status、msg和data,不需要再去手动实例化
对象json的转换
引入json转换的类
在util包中添加JsonUtil类
import java.util.List;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* 自定义响应结构
*/
public class JsonUtils {
// 定义jackson对象
private static final ObjectMapper MAPPER = new ObjectMapper();
/**
* 将对象转换成json字符串。
*
* @param data json数据
* @return
*/
public static String objectToJson(Object data) {
try {
String string = MAPPER.writeValueAsString(data);
return string;
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return null;
}
/**
* 将json结果集转化为对象
*
* @param jsonData json数据
* @param beanType 对象中的object类型
* @return
*/
public static <T> T jsonToPojo(String jsonData, Class<T> beanType) {
try {
T t = MAPPER.readValue(jsonData, beanType);
return t;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将json数据转换成pojo对象list
*
* @param jsonData json数据
* @param beanType 对象中的object类型
* @return
*/
public static <T> List<T> jsonToList(String jsonData, Class<T> beanType) {
JavaType javaType = MAPPER.getTypeFactory().constructParametricType(List.class, beanType);
try {
List<T> list = MAPPER.readValue(jsonData, javaType);
return list;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
添加测试方法
在test包下添加测试类
package com.banana.demo;
import com.banana.demo.entity.User;
import com.banana.demo.util.JsonUtils;
import org.junit.jupiter.api.Test;
import java.util.List;
public class JsonTest {
@Test
public void testJson() {
User user = new User("1", "Banana", "123456");
String strObject = JsonUtils.objectToJson(user);
System.out.println(strObject);
// {"id":"1","user_name":"Banana","user_password":"123456"}
String userJson = "{\"id\":\"1\",\"user_name\":\"Banana\",\"user_password\":\"123456\"}";
User user1 = JsonUtils.jsonToPojo(userJson, User.class);
System.out.println(user1);
/*
[
{"id":"2","user_name":"老王","user_password":"老王的密码"},
{"id":"3","user_name":"老孙","user_password":"老孙的密码"}
]
*/
String strList = "[\n" +
"{\"id\":\"2\",\"user_name\":\"老王\",\"user_password\":\"老王的密码\"},\n" +
"{\"id\":\"3\",\"user_name\":\"老孙\",\"user_password\":\"老孙的密码\"}\n" +
"]";
List<User> userList = JsonUtils.jsonToList(strList, User.class);
System.out.println(userList);
}
}
结果返回:
{“id”:“1”,“user_name”:“Banana”,“user_password”:“123456”}
User(id=1, user_name=Banana, user_password=123456)
[User(id=2, user_name=老王, user_password=老王的密码), User(id=3, user_name=老孙, user_password=老孙的密码)]
以上测试类只是测试如何使用