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

2022-09-03 14:37:18

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

另外一点,在返回参数或者其他业务中,有时候遇到实体和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结果集
 */@DatapublicclassResultimplementsSerializable{// 定义jackson对象privatestaticfinal ObjectMapper MAPPER=newObjectMapper();// 响应业务状态private Integer status;// 响应消息private String msg;// 响应中的数据private Object data;publicResult(){}publicResult(Integer status, String msg, Object data){this.status= status;this.msg= msg;this.data= data;}publicResult(Object data){this.status=1;this.msg="OK";this.data= data;}publicstatic Resultok(){returnnewResult(null);}publicstatic Resultok(Object data){returnnewResult(data);}publicstatic Resultbuild(Integer status, String msg){returnnewResult(status, msg, null);}publicstatic Resultbuild(Integer status, String msg, Object data){returnnewResult(status, msg, data);}}

在controller中的修改

主要是对接口的返回值类型做一个修改,并且对返回的参数做一个封装

@RestController@Api(tags="用户操作")publicclassUserController{@Autowiredprivate UserDao userDao;@GetMapping("/users")@ApiOperation(value="获取用户列表", notes="获取所有的user信息")public ResultgetUserList(){
        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;/**
 * 自定义响应结构
 */publicclassJsonUtils{// 定义jackson对象privatestaticfinal ObjectMapper MAPPER=newObjectMapper();/**
     * 将对象转换成json字符串。
     *
     * @param data json数据
     * @return
     */publicstatic StringobjectToJson(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
     */publicstatic<T> TjsonToPojo(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
     */publicstatic<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;publicclassJsonTest{@TestpublicvoidtestJson(){
        User user=newUser("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使用教程

  • 作者:Geek-Banana
  • 原文链接:https://blog.csdn.net/qq1515312832/article/details/103293342
    更新时间:2022-09-03 14:37:18