一、表单校验
1、 后端校验同样是通过注解的形式进行设置
在实体类中属性上添加注解

/**
* Created by Advancer on 2017/12/19 21:08.
* auth: lbh
*/
@Entity //注解的包 都是引用的 javax.persistence 下的
public class User {@Id@GeneratedValueprivate Integer id;private String name;@Min(value = 18, message = "禁止添加未成年人员!")private String age;@NotNull(message = "金额必传")private Double money;getter()  setter()  toString()}

2、在控制层中 可以进行校验

     /*** 新增一条记录* @param user* @return*/@PostMapping(value = "/addUser")public Object addUser(@Valid User user, BindingResult bindingResult){if (bindingResult.hasErrors()){return ResultUtils.error(1, bindingResult.getFieldError().getDefaultMessage());}user.setAge(user.getAge());user.setMoney(user.getMoney());return ResultUtils.success(userRepository.save(user));}

@Valid 验证实体信息
BindingResult 错误校验信息类
返回类型 ResultUtils 工具类,在下面 异常处理中 讲解到
3、返回结果

二、AOP思想
OOP (面向对象) 面向对象是将不同的需求功能垂直划分为不同的并且相对独立的,它会封装成良好的类,并让它们有自己的行为。代表技术有 Java、C++、 C#…
AOP (面向切面)一种编程范式(编程思想),与程序语言无关,将面向对象构建的庞大体系进行水平的切割, 并将影响到的多个类的公共的行为,封装成一个公共的模块,这个模块就成为 切面;思想:将通用的逻辑从业务逻辑中进行分离。
POP (面向过程) 以事件、过程为中心的编程思想。 C语言

例子:以登入访问为例:要求用户必须先登录才能访问

1、首先在 pom.xml 中新增一个依赖:

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

2、创建一个处理文件

package com.lbh.aspect;import org.aspectj.lang.annotation.After;
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;/**
* AOP 处理类
* Created by Advancer on 2018/1/14 16:26.
* auth: lbh
*/
@Aspect
@Component
public class HttpAspect {private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);@Pointcut("execution(public * com.lbh.Controller.UserController.*(..))")      //拦截 UserController 类中 所有的方法public void log(){}@Before("log()")public void doBefore(){logger.info("doBefore()111");// ....一些逻辑操作}@After("log()")public void doAfter(){logger.info("doAfter()222");// ....一些逻辑操作}}

3、以getUsers 为例,运行结果

三、异常统一处理
1、首先将 json 返回格式进行统一处理一下

创建一个 result 返回提示实体类;

/**
* 错误消息提示类
* Created by Advancer on 2018/1/14 18:51.
* auth: lbh
*/
public class Result<T> {private Integer code; //错误码private String msg; //错误消息private T data; //具体内容getter()  setter()  toString()}

再写一个工具类:

public class ResultUtils {public static Result success(Object obj){Result result = new Result();result.setCode(0);result.setMsg("成功!");result.setData(obj);return result;}public static Result success(){return success(null);}public static Result error(Integer code, String msg){Result result = new Result();result.setCode(code);result.setMsg(msg);return result;}
}

2、在controller中使用

/**
* 新增一条记录
* @param user
* @return
*/
@PostMapping(value = "/addUser")
public Object addUser(@Valid User user, BindingResult bindingResult){if (bindingResult.hasErrors()){return ResultUtils.error(1, bindingResult.getFieldError().getDefaultMessage());}user.setAge(user.getAge());user.setMoney(user.getMoney());return ResultUtils.success(userRepository.save(user));
}

测试结果,可在表单验证节点看到。

3、再建立一个 异常捕获类

@ControllerAdvice
public class ExceptionHandle {private static final Logger logger = LoggerFactory.getLogger(ExceptionHandle.class);@ExceptionHandler(value = Exception.class)@ResponseBodypublic Result<User> handle(Exception e){if (e instanceof UserException){UserException userException = (UserException) e;return ResultUtils.error(userException.getCode(), userException.getMessage());}else {logger.info("【系统异常】{}", e);return ResultUtils.error(-1, "未知错误!");}}}
/**
* 异常处理类
* Created by Advancer on 2018/1/15 11:28.
* auth: lbh
*/
public class UserException extends RuntimeException {// 继承RuntimeException 有事务回滚,Exception 事务提交不会自动回滚private Integer code ;/*** Constructs a new runtime exception with the specified detail message.* The cause is not initialized, and may subsequently be initialized by a* call to {@link #initCause}.** @param message the detail message. The detail message is saved for* later retrieval by the {@link #getMessage()} method.* @param code*/public UserException(ResultEnum resultEnum) {super(resultEnum.getMsg());this.code = resultEnum.getCode();}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}
}

4、错误码、错误消息 统一管理
采用 枚举实现

/**
* Created by Advancer on 2018/1/15 13:49.
* auth: lbh
*/
public enum ResultEnum {UNKNOW_ERROR(-1, "未知错误!"),SUCCESS(0, "成功!"),PRIMARY_SCHOOL(100, "你可能还在上小学!"),MIDDLE_SCHOOL(101, "你可能在上初中!");private Integer code;private String msg;ResultEnum(Integer code, String msg) {this.code = code;this.msg = msg;}getter()   //枚举不需要setter()方法
}

方法具体使用实现

public Integer getAge(Integer id) throws Exception{User user = userRepository.findOne(id);Integer age = Integer.parseInt(user.getAge());if (age < 10){//...throw new UserException(ResultEnum.PRIMARY_SCHOOL);}else if (age > 10 && age < 16){//...throw new UserException(ResultEnum.MIDDLE_SCHOOL);}// ..return 0;
}

Spring boot(三):Web 进阶相关推荐

  1. Gradle进阶:1: 结合spring boot进行web开发

    在前面的文章中介绍了如何使用gradle的基础知识,这篇文章在某种程度上才是真正意义上的第一个hello world,这里使用一个简单的spring boot的例子,通过gradle进行编译和构建以及 ...

  2. Spring Boot学习笔记-进阶(3)

    文章目录 Spring Boot学习笔记-进阶(3) 一.Spring Boot与缓存 二.Spring Boot与消息 三.Spring Boot与检索 四.Spring Boot与任务 异步任务 ...

  3. 精选Spring Boot三十五道必知必会知识点!

    Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家.本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spr ...

  4. Spring Boot Initilizr Web界面

    Spring Boot Initilizr Web界面 在这篇文章中,我们将讨论Spring Boot Initilizr Web Interface及其IDE或IDE插件.在阅读帖子之前,请查看我之 ...

  5. Spring Boot(5) web开发(3)拦截器、文件上传、异常处理

    Spring Boot(5) web开发(3)拦截器.文件上传.异常处理 学习视频: https://www.bilibili.com/video/BV19K4y1L7MT?p=49&spm_ ...

  6. 【spring boot】5.spring boot 创建web项目并使用jsp作前台页面

    贼烦的是,使用spring boot 创建web项目,然后我再idea下创建的,but 仅仅启动spring boot的启动类,就算整个项目都是好着的,就算是能够进入controller中,也不能成功 ...

  7. Spring boot(web 组件,ORM 操作 MySQL,接口架构风格—RESTful,集成 Redis,集成 Dubbo,打包)

    文章目录 1.3 第三章 Spring Boot 和 web 组件 1.3.1 SpringBoot 中拦截器 1.3.2 Spring Boot 中使用 Servlet 1.3.3 Spring B ...

  8. Spring Boot之Web开发

    Web开发 简单了解 快速上手 JSON 的支持 RESTful 的支持 支持热部署 快速上手 拦截器与过滤器 自定义过滤器 示例 自定义拦截器 示例 打包部署 多环境配置 服务器配置 项目打包 简单 ...

  9. Spring Boot与web开发

    Spring Boot与web开发 1. 2. 3. 4. 5. 6. 7. 8. 9. 0. 四.Web开发 1.简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的 ...

  10. 【spring boot】第3篇:spring boot 进行 web 开发

    spring boot 对 web 静态资源的管理 经过前两篇文章我们知道spring boot最大的功能就是自动配置.主要是通过以下两个类实现该功能: xxxxAutoConfiguration : ...

最新文章

  1. AIの幕后人:探秘“硬核英雄”的超级武器
  2. C语言进行数据指定步长的区间统计
  3. SpringAPI手动创建代理对象——ProxyFactory
  4. awr报告分析 mysql_AWR报告的生成和简单分析方法
  5. BlueCat 批量网站查询工具,全网最快的查询工具!!
  6. Linux block
  7. micropython flask_在Python的Flask框架中实现单元测试的教程
  8. 报告PPT(163页):基于Python语言的课程群建设探讨与实践
  9. Inno Setup 检测已安装的.NET Framework 版本
  10. Docker Java程序镜像制作
  11. Tomcat的虚拟目录映射常用的几种方式
  12. logrotate 对某个日志的配置
  13. 基于Python的RRT算法实现
  14. pytorch 使用netron可视化
  15. wireshark找不到捕获接口问题和net start npf 服务器名无效、拒绝访问的解决办法
  16. 计算机图形学---常用颜色模型汇总(RGB,CMY,HSV)
  17. c++ 多边形求交集代码(凸多边形与凸多边形交集)
  18. 基于springboot的实验室预约管理系统(完美运行,数据库源代码,可远程调试)
  19. SSM智能家居产品销售管理毕业设计源码161618
  20. 21级pta《查找表》

热门文章

  1. 怦然心动(Flipped)-5
  2. 深度学习入门(五) softmax回归
  3. 我没见过凌晨四点的洛杉矶,但想带你聆听每个都市夜归人的故事
  4. 若菜光个人小档案(dambolo)
  5. 【使用Modern UI快速开发WPF应用】
  6. 【Web】CSS(No.33)Css页面布局经典案例(三)《京东首页》
  7. 定时器应用—选项卡自动切换
  8. linux网络编程——聊天室总结
  9. 你还在用截图工具,获取视频中的图片?
  10. vscode 突然无法切换输入法(切换中文输入法)