学习springboot+vue笔记十--springboot数据封装以及自定义异常。

最近身体不太舒服,休息了一段。今天继续书写笔记。
接上一篇的项目架构,返回的数据类型比较乱,有时候返回boolean类型,有时候又返回List类型。
所以我们今天把所有的返回数据同意封装一下。

数据封装

在common文件下新建一个DataResult类,名字可以自动,代码为

package com.zhuoaninfo.vueDemo.common;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class DataResult {
  private    String code;
  private    String message;
  private    Object data;
  public static DataResult Success(Object data) {
      return new DataResult(Contants.Code_200, "查询成功", data);
  }
    public static DataResult Success( String message) {
        return new DataResult(Contants.Code_200, message,null);
    }
    public static DataResult error( ) {
        return new DataResult(Contants.Code_500, "系统错误,请联系管理员",null);
    }
    public static DataResult error(String code ,String message ) {
        return new DataResult(code, message,null);
    }
}

上面的代码使用@data注释,如果不加注释,就需要getter和setter函数,否者前端调用会报错。

为了将错误代码也统一管理,新建一个接口类contans,代码

package com.zhuoaninfo.vueDemo.common;
public interface Contants {
    final String Code_200="200";
    final String Code_400="400";
    final String Code_500="500";
    final String Code_401="401";
}

使用封装类

使用封装类改造userController,代码如下:

package com.zhuoaninfo.vueDemo.controller;

import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zhuoaninfo.vueDemo.common.DataResult;
import com.zhuoaninfo.vueDemo.dto.UserDto;
import com.zhuoaninfo.vueDemo.entity.User;
import com.zhuoaninfo.vueDemo.service.UserService;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;

@RestController
@Controller
@RequestMapping("/vueDemo")
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/users")
    public DataResult getUsers() {
        return DataResult.Success(userService.list());
    }

    @PostMapping("/user")
    public DataResult addUser(@RequestBody User vo) {

        return DataResult.Success(userService.saveOrUpdate(vo));
    }

    @PutMapping("/user")
    public DataResult updateUser(@RequestBody User vo) {
        return DataResult.Success(userService.updateById(vo));
    }

    @RequestMapping("/getPages")
    public DataResult getPages(@RequestParam Integer pageNum, @RequestParam Integer pageSize, @RequestParam String name, @RequestParam String real_name) {
        IPage<User> page = new Page<>(pageNum, pageSize);
        QueryWrapper<User> query = new QueryWrapper<>();
        if(null !=name){
            query.like("name",name);
        }
        if(null !=real_name){
            query.like("real_name",real_name);
        }
        return DataResult.Success(userService.page(page, query));
    }
 
    @PostMapping("/login")
    public DataResult Login(@RequestBody UserDto userDto){
        if(StringUtils.isEmpty(userDto.getUsername())){
            return DataResult.error();
        }
        if(StringUtils.isEmpty(userDto.getPassword())){
            return DataResult.error();
        }
        UserDto login = userService.login(userDto);
        if(null!=login){
            return DataResult.Success(login);
        }
        return DataResult.error();
    }
}

因为时间原因,代码改造了一部分,以后新的代码就可以按照封装类书写了,或者使用代码生成器的模版就行优化,详见之前的笔记–代码生成器。

springboot自定义异常

在common文件下新建exception文件夹,新建ServiceException类,代码如下:

package com.zhuoaninfo.vueDemo.common.exception;
import lombok.Getter;
@Getter
public class ServiceException extends RuntimeException {
    private  String code;
    public ServiceException(String code,String msg){
        super(msg);
        this.code=code;
    }
}

然后再新建一个自定义的异常处理类 GloblelExceptionHandler,代码如下:

package com.zhuoaninfo.vueDemo.common.exception;

import com.zhuoaninfo.vueDemo.common.DataResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
public class GloblelExceptionHandler {
    @ExceptionHandler(ServiceException.class)
    @ResponseBody
    public DataResult handle(ServiceException se){
       return DataResult.error(se.getCode(),se.getMessage());
    }
}

使用自定义异常

我们在userServceImpl中的登录功能进行使用,代码如下

package com.zhuoaninfo.vueDemo.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.log.Log;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhuoaninfo.vueDemo.common.Contants;
import com.zhuoaninfo.vueDemo.common.exception.ServiceException;
import com.zhuoaninfo.vueDemo.dto.UserDto;
import com.zhuoaninfo.vueDemo.entity.User;
import com.zhuoaninfo.vueDemo.mapper.UserMapper;
import com.zhuoaninfo.vueDemo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService{
    private static final Log LOG = Log.get();
    public UserDto login(UserDto userDto){
        QueryWrapper<User> query = new QueryWrapper<>();
        query.eq("name", userDto.getUsername());
        query.eq("password", userDto.getPassword());
        User one;
        try{
             one=getOne(query);

        }catch (Exception e){
        LOG.error("");
        throw new ServiceException(Contants.Code_500,"系统错误");
        }
        if(one!=null){
            BeanUtil.copyProperties(one, userDto,true);
            return userDto;
        }else{
            throw new ServiceException(Contants.Code_400,"程序员定义:用户名或密码错误");
        }
    }

}

启动后端项目,启动前端项目,输入不存在的用户。
在这里插入图片描述测试成功!

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cngm110

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

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

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

打赏作者

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

抵扣说明:

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

余额充值