2019独角兽企业重金招聘Python工程师标准>>>

1. 表单验证

首先, 在实体类的需要验证的字段上添加添加验证注解, 验证注解类主要在 validation-api-1.1.0.Final.jar 的 javax.validation.constraints 包下, 以及 hibernate-validator-5.3.6.Final.jar 的 org.hibernate.validator.constraints 包下, 常用验证注解:  @Min @Max @Length @Email 等.

public class User {private Integer id;private String name;@Min(value=12,message="年龄不能小于12岁")private Integer age;

然后, 在需要验证的参数前加 @Valid 注解, 使用 BindingResult 获取验证不通过的信息

@RestController
public class UserController {@PostMapping("/addUser")public void getUserList(@Valid User user, BindingResult bindingResult) {if(bindingResult.hasErrors()) {// 打印出字段验证信息System.out.println(bindingResult.getFieldError().getDefaultMessage());System.out.println("BBBBBBBBB");}System.out.println("AAAAAAAAAAA");}
}

2. AOP 统一处理请求

首先, 要引入 aop 相关 jar 包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

然后, 新建 aop 类

package com.codingos.springboot.aspect;import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;@Aspect
@Component
public class HttpAspect {private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);@Pointcut("execution(public * com.codingos.springboot.controller.UserController.*(..))")public void log() {}/***  在被切入的方法执行之前执行*/@Before("log()")public void doBefore(JoinPoint joinPoint) {logger.info("***************** before aop 执行 ****************");ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();// urllogger.info("url={}", attributes.getRequest().getRequestURL());// methondlogger.info("method={}", attributes.getRequest().getMethod());// iplogger.info("ip={}", attributes.getRequest().getRemoteAddr());// 类方法logger.info("class_method={}", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());// 参数logger.info("args={}", joinPoint.getArgs());}/***  在被切入的方法执行之后执行*/@After("log()")public void doAfter() {logger.info("************************ after aop 执行 **************************");}/*** 用来获取返回值*/@AfterReturning(returning = "object",pointcut = "log()")public void doAfterReturning(Object object) {logger.info("response={}", object.toString());}
}

3. 统一返回格式

统一返回实体类

package com.codingos.springboot.common;public class Result<T> {private Integer code;// 正常成功为0,异常失败为1private String message;private T data;public Result() {}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public T getData() {return data;}public void setData(T data) {this.data = data;}
}

返回工具类

public class ResultUtil<T> {public static <T> Result<T> success(T object) {Result<T> result = new Result<>();result.setCode(0);result.setMessage("成功");result.setData(object);return result;}public static <T> Result<T> success() {Result<T> result = new Result<>();result.setCode(0);result.setMessage("成功");return result;}public static <T> Result<T> error(Integer code, String message) {Result<T> result = new Result<>();result.setCode(code);result.setMessage(message);return result;}
}

返回状态码 (错误码)

public enum ResultEnum {EXCEPTION(-1,"未知异常"),SUCCESS(0,"操作正常"),ERROR(1,"发生错误");private Integer code;private String message;private ResultEnum(Integer code, String message) {this.code = code;this.message = message;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}

4. 统一异常处理

自定义异常

public class CustomException extends RuntimeException {private static final long serialVersionUID = 7425266758852563283L;private Integer code;public CustomException(ResultEnum resultEnum) {super(resultEnum.getMessage());this.code = resultEnum.getCode();}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}
}

统一异常处理类 (异常往上抛 , 到controller 层也往外抛)

@ControllerAdvice
public class ExceptionHandle {private final static Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);@ExceptionHandler(value=Exception.class)@ResponseBodypublic Result<Object> handle(Exception e) {logger.error(ResultEnum.EXCEPTION.getMessage(), e);return ResultUtil.result(ResultEnum.EXCEPTION, e.getMessage());}
}

代码参考
可以到我的码云 https://gitee.com/jayking/spring-boot-learning 中的 spring-boot-web 目录下

转载于:https://my.oschina.net/zdtdtel/blog/1645104

Spring Boot Web 开发相关总结相关推荐

  1. spring boot web 开发示例

    一.创建Maven工程 创建maven工程,packaging 类型选择jar. 二.配置相关maven依赖. 1,首先你需要在pom中最上方添加spring boot的父级依赖,这样当前的项目就是S ...

  2. Spring boot web开发实战

    Spring boot项目创建好之后,如何引入静态资源: 1).webjars:直接以maven的方式把包导入进来 <!‐‐引入jquery‐webjar‐‐>在访问的时候只需要写webj ...

  3. Spring Boot web开发(未完待续)

    addViewController请求 attention: 想要把网站的图标换掉就在static下放一个 favicon.ico 的图标图片即可 Spring MVC 5.0.5官方文档 stati ...

  4. spring boot web开发------自定义springmvc配置

    1.如何自定义springmvc配置 旧的springmvc配置文件 <?xml version="1.0" encoding="UTF-8"?> ...

  5. Spring boot web(2):web综合开发

    1 web开发 Spring boot web 开发非常简单,其中包括常用的 json输出.filters.property.log等 1.1 json接口开发 在以前的Spring 开发我么提供js ...

  6. Spring Boot Web

    一. 概述 下面我们将进入 SpringBoot 基础阶段的学习. 在没有正式的学习 SpringBoot 之前,我们要先来了解下什么是 Spring . 我们可以打开 Spring 的官网 ( ht ...

  7. java quartz spring_JavaLib-quartz | 基于Spring Boot Quartz开发的定时任务

    基于Spring Boot Quartz开发的JavaLib-quartz,目的是帮你快速构建定时任务系统,你可以专心编写你的业务逻辑,而不必关注定时任务具体是如何实现的,他的性能如何,有没有异常以及 ...

  8. Spring boot+CXF开发WebService Demo

    本文转载自: https://www.cnblogs.com/fuxin41/p/6289162.html 作者:fuxin41 转载请注明该声明. 最近工作中需要用到webservice,而且结合s ...

  9. Spring Boot 企业级开发课后题答案

    Spring Boot 企业级开发课后题答案 黑马程序员 加粗字体为答案 转发请注明出处[感谢] 第一章 1.1 填空题 Pivotal 团队在原有 spring 框架的基础上开发了全新的Spring ...

最新文章

  1. php 变更 obj,php怎么将object转为string
  2. retinaface 改进
  3. Asp.net设计模式笔记之一:理解设计模式
  4. 谷歌解雇资深研究员Timnit Gebru 或仅因为一篇论文
  5. 0428专题:行内元素与块状元素
  6. java map中的entry_java中Map及Map.Entry详解(组图)
  7. 判断CPU是大端还是小端
  8. android——获取ImageView上面显示的图片bitmap对象
  9. mybatis字符串转成数字_计算机储存数字和字符的方法你了解多少?
  10. [root@py ~]# watch -n 1 ifconfig 求解释
  11. 【网络】HTTP原理的简单理解
  12. 算法导论学习笔记13_贪心算法
  13. 《赵云要格斗》游戏开源啦!要代码要资源就来!~~~~~~~
  14. 【LeetCode-SQL】579. 查询员工的累计薪水
  15. UltraEdit mac版
  16. Java虚拟机这一块 —— 深入理解java虚拟机(jvm)
  17. 临沂办理高新技术企业需要什么文件及材料
  18. 两大热门技术碰撞 论区块链在物联网中的应用
  19. WINDOWS网络服务第一章预习导图
  20. matlab的polynomial,matlab的polynomial - 百度学术

热门文章

  1. zeptojs-跑马灯效果
  2. SpringMVC(三):使用 POJO 对象绑定请求参数值
  3. 优秀开发者和差的开发者之间区别
  4. mysql从入门到精通之数据库安装图解
  5. 【OpenGL】关于OpenGL中Bind函数的理解
  6. VS 常见快捷键(转)
  7. 有效地使用计算机操作系统的教学设计与反思,《操作系统的基础知识(1)》教学设计及反思...
  8. drools规则引擎可视化_Springboot2(60)集成规则引擎Drools
  9. 用Scrapy爬虫框架爬取食品论坛数据并存入数据库
  10. wp10 android,WP10能在Android机正常用不?