(七) spring boot 接口返回结果封装&&对象json的转换

对于很多时候,都是使用前后端分离的形式来写的接口,所以对于数据返回的规定是必不可少的,在我们日常的开发中这部分的使用还是很必要的

另外一点,在返回参数或者其他业务中,有时候遇到实体和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=老孙的密码)]

以上测试类只是测试如何使用

参考博客

Java开发:返回结果集Result工具类以及JSONUtil

本系列博客


Banana的SpringBoot系列博客

(一) SpringBoot 项目初始化 + 配置swagger页面

(二) SpringBoot 整合 MyBatis-plus

(三) SpringBoot之使用Swagger配置详解

(四) spring boot 多环境配置

(五) spring boot 配置使用 redis

(六) spring boot 整合rabbitmq 与 rabbitmq使用教程

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek-Banana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值