【SpringBoot】表单验证和使用AOP处理请求

举报
谙忆 发表于 2021/05/27 14:13:19 2021/05/27
【摘要】 表单验证 项目是上篇文章继续的。 首先说下要干嘛,我们需要拦截People年龄在18岁以下的 首先是在People上的年龄增加一个注解 @Min(value = 18,message = "年龄必须大于18")//message为提示 20180103 private Integer age;12 在这里,我们拦截新增的方法 也就是IndexCont...

表单验证

项目是上篇文章继续的。

首先说下要干嘛,我们需要拦截People年龄在18岁以下的

首先是在People上的年龄增加一个注解

@Min(value = 18,message = "年龄必须大于18")//message为提示  20180103
private Integer age;
  
 
  • 1
  • 2

在这里,我们拦截新增的方法
也就是IndexController类中的peopleAdd方法

/**
 * 新增一个对象
 * 增加一个功能,如果年龄大于18,就不让添加进数据库 20180103
 * @param people
 * @return
 */
@PostMapping(value = "/add")
public People peopleAdd(@Valid People people, BindingResult bindingResult){//@Valid 注解表示使用数据校验 People类中对年龄进行了限制 ,验证返回结果会在bindingResult对象中 20180103 //@RequestParam(value = "people")  直接传类的时候,建议不要使用RequestParam注解 //当然,你可以选择每一个参数都写上,但没必要,更多的时候是直接传类对象,注意url的参数名和类中属性名对上 if(bindingResult.hasErrors()){//验证出现错误 System.out.println("验证错误信息:"+bindingResult.getFieldError().getDefaultMessage()); return null; } return peopleDao.save(people);
}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

这样我们就实现了年龄的拦截,当年龄没有大于等于18,则bindingResult.hasErrors()返回的是true

没有什么新的知识点,springMVC都学过的
与Min注解相对应的还有@Max注解

使用AOP处理请求

AOP是一种编程范式,与语言无关,是一种程序设计思想
下面列出三种程序设计思想:
AOP-面向切面 Aspect Oriented Programming
OOP-面向对象 Object Oriented Programming
POP-面向过程 Procedure Oriented Programming

面向过程到面向对象的区别
其实就是思考点的不同
我们用下雨来说一个例子

面向过程的思想会这样做:
假如下雨了,我打开了雨伞

在面向对象的思想中,应该这么做:
比如用Java,首先会实现一个叫天气的对象,给天气对象赋予一个下雨的动作
至于我,也会实现一个我的对象,给我这个对象赋予一个打伞的动作
在Java里面,这些动作可以称为方法

上面这两种思想其实就是”换个角度看世界,换个姿势处理问题”

AOP的通用思想是:
将通用逻辑从具体的业务逻辑中分离出来

统一处理请求日志

以记录每一个http请求来写实例

首先去pom.xml添加aop的依赖

<!-- AOP的依赖-->
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
  
 
  • 1
  • 2
  • 3
  • 4
  • 5

增加一个aop的类:

package cn.chenhaoxiang.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
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;

import javax.servlet.http.HttpServletRequest;


/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2018/1/3.
 * Time: 下午 10:10.
 * Explain:
 */
@Aspect
@Component
public class HttpAspect { private final static Logger logger = LoggerFactory.getLogger(HttpAspect.class);//使用org.slf4j.Logger, /** * 定义切面 */ @Pointcut("execution(public * cn.chenhaoxiang.controller.IndexController.*(..))") public void httpLog(){ } /** * 在方法执行之前执行 */
// @Before("execution(public * cn.chenhaoxiang.controller.IndexController.*(..))")//*在这里表示匹配所有的方法, (..) 表示任意参数,包含没有参数的 @Before("httpLog()") public void before(JoinPoint joinPoint){ logger.info("before"); ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //url logger.info("url={}",request.getRequestURI());//会把request.getRequestURI()的值赋值到{}中去 //method  请求方式 logger.info("method={}",request.getMethod()); //ip logger.info("ip={}",request.getRemoteAddr()); //请求的类方法 logger.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName()); //参数 logger.info("args={}",joinPoint.getArgs()); }

// @After("execution(public * cn.chenhaoxiang.controller.IndexController.*(..))")//这个和上面的Before里面的值重复了,我们可以换种方式来实现 @After("httpLog()") public void after(){ logger.info("after"); } @AfterReturning(returning = "object",pointcut = "httpLog()") public void afterReturning(Object object){//object为方法返回的参数 logger.info("response={}",object);//toString,不然输出的对象会是地址 //最好是不写object.toString(),直接输出object,这样的话,就不用担心object空指针了。 }

}
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

基本上就是这些了。本章就到这儿了,该睡觉了,现在还在集体宿舍,键盘声比较大、
以后出去住就可以学习到半夜了,哈哈

源代码下载地址:

GITHUB源码下载地址: 点我进行下载

本文章由[谙忆]编写, 所有权利保留。
欢迎转载,分享是进步的源泉。

转载请注明出处:http://chenhaoxiang.cn/2018/01/03/5001/
本文源自谙忆的博客

文章来源: chenhx.blog.csdn.net,作者:谙忆,版权归原作者所有,如需转载,请联系作者。

原文链接:chenhx.blog.csdn.net/article/details/79182603

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。