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. 实现了__iter__和__next__的对象是迭代器

    class MyList(object): """自定义的一个可迭代对象""" def __init__(self): self.items ...

  2. [C++]类的空指针调用成员函数后,会发生什么事?

    类的实例调用成员函数的原理 其实不管是通过对象实例或指针实例调用,其实底层调用的过程都是一样的,都是把当前对象的指针作为一个参数传递给被调用的成员函数.通过下面的相关实例代码进行检验: 实验的C++代 ...

  3. PHP curl_setopt函数

    (PHP 4 >= 4.0.2, PHP 5) curl_setopt — 设置一个cURL传输选项. 说明 bool curl_setopt ( resource $ch , int $opt ...

  4. PHP gmstrftime() 函数

    ------------恢复内容开始------------ 实例 根据区域设置格式化 GMT/UTC 日期和时间: <?phpecho(gmstrftime("%B %d %Y, % ...

  5. HTML <html> manifest 属性

    实例 带有缓存 manifest 的 HTML 文档(用于离线浏览): <!DOCTYPE HTML><html manifest="demo.appcache" ...

  6. PHP bin2hex() 函数

    实例 把 "Hello World!" 转换为十六进制值: <?php 高佣联盟 www.cgewang.com$str = bin2hex("Hello Worl ...

  7. PHP simplexml_import_dom() 函数

    实例 获取 DOM 文档节点并转换为 SimpleXML 节点: <?php$dom=new domDocument;高佣联盟 www.cgewang.com$dom->loadXML(& ...

  8. luogu P5161 WD与数列 SAM 线段树合并 启发式合并

    LINK:WD与数列 这道题可谓妙绝 我明白了一个增量统计的原理. 原本的想法是:差分之后 显然长度为1的单独统计 长度为2的以及更多就是字符串之间的匹配问题了. 对差分序列建立SAM 由于第一个是一 ...

  9. [转]Java 逃逸分析

    作者:栈长  公众号:Java技术栈 记得几年前有一次栈长去面试,问到了这么一个问题:Java中的对象都是在堆中分配吗?说明为什么! 当时我被问得一脸蒙逼,瞬间被秒杀得体无完肤,当时我压根就不知道他在 ...

  10. Window Server2012 修改远程桌面端口号

    Win + R 输入 regedit 打开注册表编辑器 在注册表编辑器中找到 PortNumber 双击 PortNumber,选择10进制,修改想要的端口号 把修改的端口添加为入站规则 重启 Rem ...