import java.io.Serializable;
import lombok.Data;
import org.springframework.http.HttpStatus; @Data
public class Result implements Serializable { private static final long serialVersionUID = -1802122468331526708L; private Integer code;// 状态码
private String msg;// 返回信息
private Object data;// 返回数据 //自定义code,msg,data
private Result(Integer code, String msg, Object data) {
this.data = data;
this.code = code;
this.msg = msg;
} //自定义data
private Result(Object data) {
this.data = data;
this.code = HttpStatus.OK.value();
this.msg = HttpStatus.OK.getReasonPhrase();
} //自定义code,msg
private Result(Integer code, String msg) {
this.code = code;
this.msg = msg;
} private Result() {
this.code = HttpStatus.OK.value();
this.msg = HttpStatus.OK.getReasonPhrase();
} public static Result success(Integer code, String msg, Object data) {
return new Result(code, msg, data);
} public static Result success(Integer code, String msg) {
return new Result(code, msg);
} public static Result error(Integer code, String msg) {
return new Result(code, msg);
} public static Result success(Object data) {
return new Result(data);
} public static Result success() {
return new Result();
} }

Controller 层使用 Result

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.my_springboot.user.pojo.UserInfoDO;
import com.my_springboot.user.service.IUserInfoService;
import com.my_springboot.util.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController; /**
* <p>
* 用户信息前端控制器
* </p>
*
* @author JiHC
* @since 2020-08-21
*/
@RestController
@RequestMapping("/user")
@Api(value = "UserInfoController", tags = {"用户模块"})
public class UserInfoController { @Autowired
IUserInfoService userInfoService; @ApiOperation("新增用户信息")
@PostMapping(value = "/saveUser")
public Result saveUser(@RequestBody UserInfoDO userInfoDO) {
userInfoService.save(userInfoDO);
return Result.success(HttpStatus.CREATED.value(), HttpStatus.CREATED.getReasonPhrase());
} @ApiOperation("根据问题id修改问题")
@PutMapping(value = "/updateUser")
public Result updateUser(@RequestBody UserInfoDO userInfoDO) {
String id = userInfoDO.getId();
if (null == id || "".equals(id)) {// 无内容
return Result
.error(HttpStatus.NO_CONTENT.value(), HttpStatus.NO_CONTENT.getReasonPhrase());
}
if (null==userInfoService.getById(id)) {// 未找到
return Result
.error(HttpStatus.NOT_FOUND.value(), HttpStatus.NOT_FOUND.getReasonPhrase());
}
userInfoService.updateById(userInfoDO);
return Result.success();
} @ApiOperation("根据id删除用户信息")
@DeleteMapping(value = "/removeUser")
@ApiImplicitParam(name = "id", value = "用户id", dataType = "string", required = true, paramType = "query")
public Result removeUser(@RequestParam String id) {
if (null == id || "".equals(id)) {// 无内容
return Result
.error(HttpStatus.NO_CONTENT.value(), HttpStatus.NO_CONTENT.getReasonPhrase());
}
if (null==userInfoService.getById(id)) {// 未找到
return Result
.error(HttpStatus.NOT_FOUND.value(), HttpStatus.NOT_FOUND.getReasonPhrase());
}
userInfoService.removeById(id);
return Result.success();
} @ApiOperation("信息")
@PostMapping(value = "/listUserPage")
@ResponseBody
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "当前页码", dataType = "int", required = true, paramType = "query", defaultValue = "1"),
@ApiImplicitParam(name = "pageSize", value = "每页数量", dataType = "int", required = true, paramType = "query", defaultValue = "10")
})
public Result listUserPage(Integer pageNum, Integer pageSize) {
Page<UserInfoDO> page = userInfoService.listUserPage(new Page(pageNum, pageSize));
return Result.success(page);
}
}

启动项目访问接口 访问修改接口 , 输入不存在的id , 期望返回404

 成功!

统一异常处理 : 

未添加异常处理时 , 参数错误的响应体 :

添加 控制器的异常处理类 ErrorHandler

import com.my_springboot.util.Result;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.NoHandlerFoundException; /**
* 控制器的异常处理类
*/
@ControllerAdvice
public class ErrorHandler { private static final org.slf4j.Logger log = LoggerFactory.getLogger(ErrorHandler.class); /**
* 输入参数校验异常
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public ResponseEntity<Result> NotValidExceptionHandler(MethodArgumentNotValidException e) {
log.debug("异常详情 ", e);
BindingResult bindingResult = e.getBindingResult();
if (bindingResult.hasErrors() == false) {
return null;
}
Map<String, String> fieldErrors = new HashMap<>();
for (FieldError error : bindingResult.getFieldErrors()) {
fieldErrors.put(error.getField(), error.getCode() + "|" + error.getDefaultMessage());
}
return new ResponseEntity<>(Result.error(, "输入错误", fieldErrors),
HttpStatus.UNPROCESSABLE_ENTITY);
} /**
* 404异常处理
*/
@ExceptionHandler(value = NoHandlerFoundException.class)
public ResponseEntity<Result> NoHandlerFoundExceptionHandler(Exception e) {
log.debug("异常详情:", e);
return new ResponseEntity<>(Result.error(, "页面丢失了!"), HttpStatus.NOT_FOUND);
} /**
* 默认异常处理,前面未处理
*/
@ExceptionHandler(value = Throwable.class)
public ResponseEntity<Result> defaultHandler(Exception e) {
log.debug("异常详情:", e);
return new ResponseEntity<>(Result.error(, "服务器错误:" + e),
HttpStatus.INTERNAL_SERVER_ERROR);
}
}

重启项目 , 访问 Swagger , 参数错误的响应体 :

配置成功 !

从零开始的SpringBoot项目 ( 七 ) 统一返回结果集Result 和 异常处理的更多相关文章

  1. 从零开始的SpringBoot项目 ( 五 ) 整合 Swagger 实现在线API文档的功能

    综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  2. 从零开始的SpringBoot项目 ( 四 ) 整合mybatis

    一.创建一个SpringBoot项目 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目 二.引入相关依赖 <!--mysql数据库驱动--> & ...

  3. 从零开始的SpringBoot项目 ( 六 ) 整合 MybatisPlus 实现代码自动生成

    1.添加依赖 <!-- MySQL数据库 --> <dependency> <groupId>mysql</groupId> <artifactI ...

  4. SpringBoot项目中处理返回json的null值

    在后端数据接口项目开发中,经常遇到返回的数据中有null值,导致前端需要进行判断处理,否则容易出现undefined的情况,如何便捷的将null值转换为空字符串? 以SpringBoot项目为例,SS ...

  5. 从零开始搭建SpringBoot项目

    一.新建springboot项目 1. new-->Project-->Spring Initralizr Group:com.zb Artifact:zbook springboot v ...

  6. 从零开始的SpringBoot项目搭建

    前言 今天是我加入博客园的第一天今天刚好学习到SpringBoot,就顺便记录一下吧 一.创建项目 1.创建工程 ① 通过File > New > Project,新建工程,选择Sprin ...

  7. 从零开始的SpringBoot项目 ( 二 ) 使用IDEA创建一个SpringBoot项目

    工欲善其事 , 必先利其器 . IntelliJ IDEA 2019.3.3 x64的安装与破解 下面详细说明下如何使用idea创建我们的第一个springboot项目: 首先打开idea主界面选择 ...

  8. 从零开始的SpringBoot项目 ( 一 ) Spring、SpringMVC和SpringBoot

    要想开始一个SpringBoot项目 , 首先要知道SpringBoot是什么 , 可以做什么 , 再去研究怎么用 . 一.概念 1.Spring Spring是一个开源容器框架,可以接管web层,业 ...

  9. 从零开始的SpringBoot项目 ( 八 ) 实现基于Token的用户身份验证

    1.首先了解一下Token uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接 固定参数(可 ...

随机推荐

  1. Django学习路2

    1.导入 Django 工程时 在 manage.py 上一级目录导入 2.Add local 本地 Add Remote 远端 3.BASE_DIR 项目所在目录的绝对路径 4.SECRET_KEY ...

  2. PHP imageantialias - 是否使用抗锯齿(antialias)功能

    imageantialias — 是否使用抗锯齿(antialias)功能.高佣联盟 www.cgewang.com 语法 bool imageantialias ( resource $image ...

  3. Python编程初学者指南PDF高清电子书免费下载|百度云盘

    百度云盘:Python编程初学者指南PDF高清电子书免费下载 提取码:bftd 内容简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python可以用于很多的领域,从科学计算 ...

  4. Python的基本运用(一)

    1.a**b  表示a的b次方. 2.def something(a,b):  定义函数,注意 python的缩进 . 3.print (a)与print a 的区别,python3中不支持print ...

  5. 笨办法学python3练习代码ex19.py

    定义函数的语法: def  函数名(参数) (语句) #函数和变量 #函数里的变量与脚本里的变量是没有联系的. def cheese_and_crackers(cheese_count,boxes_o ...

  6. 【BZOJ2724】蒲公英 题解(分块+区间众数)

    题目链接 题目大意:给定一段长度为$n$的序列和$m$次询问,每次询问区间$[l,r]$内的最小的众数.$n\leq 40000,a_i\leq 10^9$ --------------------- ...

  7. 【Python 实例】面向对象 | 按逗号分割列表

    [Python 实例]面向对象 | 按逗号分割列表 题目: 按逗号分割列表 应该得到如下结果: ["xx"],["xx"],["xx"] 解 ...

  8. python flask构建小程序订餐系统--centos下项目开发环境的搭建

    1.项目开发环境的搭建(Linux环境) 1)软件的安装 我们搭建整个项目的过程中,我们需要用到下面的一些软件,但是这些软件的安装过程我们在这里不用说明.(因为windows软件的安装比较的简单,类似 ...

  9. Android 给服务器发送网络请求

    今天听得有点蒙,因为服务器的问题,这边建立服务器的话,学长用的是Idea建立的Spring之类的方法去搞服务器. 然后就是用Android去给这个服务器发送请求,大致效果还是懂的,就是像网站发送请求, ...

  10. 学习 Python,这 22 个包怎能不掌握?

    如今全球各个行业内 Python 的使用状况怎么样呢? 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去 ...