SpringBoot集成Mybatis实现前后端数据全json传输(二)

416 阅读3分钟

前言:本文章重点在于第三步json工具类,这个类对于转换获取来的json文件有很大的帮助,再有注意的一点为前台向后台的传输方式要改为aplication/json格式,后台controller接收时,参数要加上@RequestBody注解

1、在pom文件中引入fastJson

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.78</version>
</dependency>

2、将所有的controller改为接收json数据,将json文件转换成相应的数据类型

package com.jian.myspringboot.demo.controller;

import com.alibaba.fastjson.JSON;
import com.jian.myspringboot.core.model.Message;
import com.jian.myspringboot.core.utils.JsonTools;
import com.jian.myspringboot.core.utils.MessageUtils;
import com.jian.myspringboot.demo.model.UserInfo;
import com.jian.myspringboot.demo.service.IUserinfoService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @program: mySpringBoot
 * @description: 用户controller
 * @author: xiaoQian
 * @create: 2021-11-22 20:08
 **/
@RestController
@RequestMapping("/user")
public class UserInfoController {

    @Resource
    private IUserinfoService userinfoService;

    /**
     * 根据id查询用户信息
     * @param
     * @return
     */
    @PostMapping("/queryUserById")
    public UserInfo queryUserById(@RequestBody String jsonData){
        Long id = Long.parseLong(JsonTools.json2MapString(jsonData).get("id"));
        return userinfoService.queryUserById(id);
    }

    /**
     * 查询所有用户信息
     * @return
     */
    @PostMapping("/queryAllUser")
    public List<UserInfo> queryAllUser(){
        return userinfoService.queryAllUser();
    }

    /**
     * 新增用户信息
     * @param jsonData 用户名称
     * @return 消息实体
     */
    @PostMapping(value = "/addUserInfo")
    public Message addUserInfo(@RequestBody String jsonData){
        UserInfo userInfo = JsonTools.json2Bean(jsonData,UserInfo.class);
        System.out.println(userinfoService.addUserInfo(userInfo));
        return MessageUtils.assembleMessage("0000","新增数据成功");
    }

    /**
     * 批量新增用户信息
     * @param jsonData
     * @return
     */
    @PostMapping("/addBatchUserInfo")
    public Message addBatchUserInfo(@RequestBody String jsonData){
        Map<String,Object> map = JsonTools.json2MapObject(jsonData);
        List<UserInfo> userNameList = (List<UserInfo>)map.get("userNameList");
        userinfoService.addBatchUserInfo(userNameList);
        return MessageUtils.assembleMessage("0000","新增数据成功");
    }
}

3、编写json处理工具类(此工具类保留main方法,方便调试)

package com.jian.myspringboot.core.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.jian.myspringboot.demo.model.UserInfo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author:xiaoqian
 * @Date: Created in 16:18 2021/11/29
 * @Description: json处理工具类
 */
public class JsonTools {

    // 测试main方法
    public static void main(String[] args) {
        /* ********************* map转json字符串 *********************/
        Map<String,String> map = new HashMap<>();
        map.put("id","11");
        map.put("userName","22");
        map.put("passWord","33");
        map.put("dd","44");
        map.put("ee","55");
        String json = mapString2Json(map);
        /* ********************* json字符串转map集合 *********************/
        Map<String,String> json2Map = json2MapString(json);

        /* ********************* json字符串转换成对象 *********************/
        UserInfo userInfo = json2Bean(json, UserInfo.class);

        /* ********************* 对象转换成json *********************/
        bean2Json(userInfo);

        /* ********************* List集合转换成json字符串 *********************/
        List<Object> list = new ArrayList<>();
        List<UserInfo> userInfoList = new ArrayList<>();
        userInfoList.add(userInfo);
        userInfoList.add(userInfo);
        list.add(map);
        list.add(1);
        list.add("xiaoQian");
        list.add(userInfo);
        list.add(userInfoList);
        String list2Json = list2Json(list);

        /* ********************* json转List *********************/
        List<Object> json2List = json2List(list2Json);

        /* ********************* json字符串转换成List集合 (需要实体类) *********************/
        List<UserInfo> userInfos = json2List(list2Json(json2List.get(4)),UserInfo.class);
        UserInfo kk = userInfos.get(0);

        /* *********************Map<String,Object>转json**********************/
        Map<String,Object> objectMap = new HashMap<>();
        List<UserInfo> ul = new ArrayList<>();
        Map<String,String> stringMap = new HashMap<>();
        UserInfo ui = new UserInfo();
        ui.setId(1L);
        ui.setUserName("111");
        ui.setPassWord("111pw");
        UserInfo ui1 = new UserInfo();
        ui1.setId(2L);
        ui1.setUserName("222");
        ui1.setPassWord("222pw");
        ul.add(ui);
        ul.add(ui1);
        stringMap.put("s1","s1111");
        stringMap.put("s2","s2222");
        objectMap.put("aa","111");
        objectMap.put("ul",ul);
        objectMap.put("stringMap",stringMap);
        mapObject2Json(objectMap);

        /* *********************json转Map<String,Object>**********************/
        Map<String,Object> objectMap1 = json2MapObject(mapObject2Json(objectMap));
        System.out.println(objectMap1.get("aa"));
        List<UserInfo> userInfoList1 = json2List(list2Json(objectMap1.get("ul")),UserInfo.class);
        System.out.println(userInfoList1.get(0).getId());
    }

    /**
     * json字符串转map集合(String)
     * @param jsonStr
     * @return
     */
    public static HashMap<String, String> json2MapString(String jsonStr){
        return JSON.parseObject(jsonStr, new HashMap<String, String>().getClass());
    }

    /**
     * json字符串转map集合(Object)
     * @param jsonStr
     * @return
     */
    public static HashMap<String, Object> json2MapObject(String jsonStr){
        return JSON.parseObject(jsonStr, new HashMap<String, Object>().getClass());
    }

    /**
     * map转json字符串(string)
     * @param map
     * @return
     */
    public static String mapString2Json(Map<String, String> map){
        String jsonStr = JSON.toJSONString(map);
        return jsonStr;
    }

    /**
     * map转json字符串(object)
     * @param map
     * @return
     */
    public static String mapObject2Json(Map<String, Object> map){
        String jsonStr = JSON.toJSONString(map);
        return jsonStr;
    }

    /**
     * json字符串转换成对象
     * @param jsonString
     * @param cls
     * @return
     */
    public static <T> T json2Bean(String jsonString, Class<T> cls){
        T t = null;
        try {
            t = JSON.parseObject(jsonString,cls);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }

    /**
     * 对象转换成json字符串
     * @param obj
     * @return
     */
    public static String bean2Json(Object obj){
        return JSON.toJSONString(obj);
    }

    /**
     * json字符串转换成List集合
     * (需要实体类)
     * @param jsonString
     * @return
     */
    public static <T> List<T> json2List(String jsonString, Class cls){
        List<T> list = null;
        try {
            list = JSON.parseArray(jsonString, cls);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }

    /**
     * List集合转换成json字符串
     * @param obj
     * @return
     */
    public static String list2Json(Object obj){
        return JSONArray.toJSONString(obj, true);
    }

    /**
     * json转List
     * (不需要实体类)
     * @param jsonStr
     * @return
     */
    public static JSONArray json2List(String jsonStr){
        return JSON.parseArray(jsonStr);
    }
}

4、相对应的service接口定义

package com.jian.myspringboot.demo.service;

import com.jian.myspringboot.demo.model.Department;
import com.jian.myspringboot.demo.model.UserInfo;

import java.util.List;

public interface IUserinfoService {

    /**
     * 根据id查询用户信息
     * @param userInfoId json信息
     * @return
     */
    UserInfo queryUserById(Long userInfoId);

    /**
     * 查询所有用户
     * @return 用户信息集合
     */
    List<UserInfo> queryAllUser();

    /**
     * 新增单个用户信息
     * @param userInfo 用户信息实体
     * @return 新增数据id
     */
    Long addUserInfo(UserInfo userInfo);


    /**
     * 批量新增用户信息
     * @param userInfos 用户实体集合
     * @return 新增数据id集合
     */
    int addBatchUserInfo(List<UserInfo> userInfos);
}

5、相对应的service实现

package com.jian.myspringboot.demo.service.impl;

import com.alibaba.fastjson.JSON;
import com.jian.myspringboot.core.utils.JsonTools;
import com.jian.myspringboot.demo.dao.UserInfoMapper;
import com.jian.myspringboot.demo.model.UserInfo;
import com.jian.myspringboot.demo.service.IUserinfoService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @program: mySpringBoot
 * @description: 业主信息Service
 * @author: xiaoQian
 * @create: 2021-11-22 20:39
 **/
@Service
public class UserInfoService implements IUserinfoService {

    @Resource
    private UserInfoMapper userInfoMapper;

    @Override
    public UserInfo queryUserById(Long userInfoId) {
        return userInfoMapper.queryUserById(userInfoId);
    }

    @Override
    public List<UserInfo> queryAllUser() {
        return userInfoMapper.queryAllUser();
    }

    @Override
    public Long addUserInfo(UserInfo userInfo) {
        return userInfoMapper.insertUserInfo(userInfo);
    }

    @Override
    public List<Long> addBatchUserInfo(List<UserInfo> userInfos) {
        return userInfoMapper.batchInsertUserInfo(userInfos);
    }
}

6、@RestController注解包含@Controller和@ResponseBody这两个注解,所以返回的数据会转为json