一、SpringBoot中统一全局返回格式
package com.gzgs.study01.common.utils.results;
import lombok.Data;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
public class Result<T> {
public static final String SUCCESS_CODE = "OK";
private String code;
private String message;
private T data;
private long timestamp;
}
package com.gzgs.study01.common.utils.results;
public class ResultHelper {
public static <T> Result<T> success(T data) {
return new Result<T>()
.setCode("200")
.setData(data)
.setTimestamp(System.currentTimeMillis());
}
public static <T> Result<T> fail(String message) {
return new Result<T>()
.setCode("500")
.setMessage(message)
.setTimestamp(System.currentTimeMillis());
}
}
二、数据层-mapper
1、UserMapper类
package com.gzgs.study01.web.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gzgs.study01.web.entity.User;
import com.gzgs.study01.web.param.UserParam;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
@Select({"select * from t_user where user_name = #{userName} limit 1"})
User getUserByName(String userName);
@Select({"select * from t_user where user_name like concat('%',#{userName},'%') "})
List<User> selectUserByName(String userName);
@Select({"<script>"+
" select t.* from t_user t"+
" <where>"+
" <if test='param.userName!= null and param.userName !=\"\" '>"+
" and t.user_name like concat('%',#{param.userName},'%')"+
" </if>"+
" <if test='param.age!=null'>"+
" and t.age = #{param.age} "+
" </if>"+
" </where>"+
"</script>"
})
List<User> selectUserByParam(@Param("param") UserParam param);
}
三、业务层-service
1、UserService类
package com.gzgs.study01.web.service;
import com.gzgs.study01.web.param.UserParam;
import com.gzgs.study01.web.vo.UserVo;
import java.util.List;
public interface UserService {
List<UserVo> selectUserByParam(UserParam param);
UserVo getUserByName(String userName);
}
2、UserServiceImpl类
package com.gzgs.study01.web.service.impl;
import com.gzgs.study01.common.utils.MyBeanUtils;
import com.gzgs.study01.web.entity.User;
import com.gzgs.study01.web.mapper.UserMapper;
import com.gzgs.study01.web.param.UserParam;
import com.gzgs.study01.web.service.UserService;
import com.gzgs.study01.web.vo.UserVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<UserVo> selectUserByParam(UserParam param) {
List<User> list = userMapper.selectUserByParam(param);
List<UserVo> voList = MyBeanUtils.listCopy(UserVo.class, list);
return voList;
}
@Override
public UserVo getUserByName(String userName) {
User user = userMapper.getUserByName(userName);
UserVo userVo = new UserVo();
if(Objects.nonNull(user)){
BeanUtils.copyProperties(user,userVo);
}
return userVo;
}
}
四、控制层-Controller
1、UserController类
package com.gzgs.study01.web.controller;
import com.gzgs.study01.common.utils.results.Result;
import com.gzgs.study01.common.utils.results.ResultHelper;
import com.gzgs.study01.web.param.UserParam;
import com.gzgs.study01.web.service.UserService;
import com.gzgs.study01.web.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/v1/user")
public class UserController {
@Autowired
private UserService userService;
@PostMapping("/selectUserByParam")
public Result<List<UserVo>> selectUserByParam(@RequestBody UserParam param){
List<UserVo> voList = userService.selectUserByParam(param);
return ResultHelper.success(voList);
}
}
五、Postman请求
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fce0eb51236199339e4f2241f35d4621.png)
六、其他
1、一般来说,返回给前端的是vo数据
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/497e8f0f7ff77dc7dd9ea554098b8d99.png)
2、list的entity转vo需要自己封装
package com.gzgs.study01.common.utils;
import org.springframework.beans.BeanUtils;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
public class MyBeanUtils {
public static <T,F> List<F> listCopy(Class<F> target,List<T> sourceList){
if(!CollectionUtils.isEmpty(sourceList)){
List<F> targetList = new ArrayList<>();
for (T t : sourceList){
try {
F f = target.newInstance();
BeanUtils.copyProperties(t,f);
targetList.add(f);
}catch (Exception e){
}
}
return targetList;
}else {
return null;
}
}
}
3、项目结构
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d82ff613737150147df55c19f789ded1.png)