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

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

表单验证


项目是上篇文章继续的。


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


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


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


在这里,我们拦截新增的方法

也就是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);
}


这样我们就实现了年龄的拦截,当年龄没有大于等于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>


增加一个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空指针了。
    }
}

基本上就是这些了。本章就到这儿了,该睡觉了,现在还在集体宿舍,键盘声比较大、

以后出去住就可以学习到半夜了,哈哈

源代码下载地址:

GITHUB源码下载地址: 点我进行下载
目录
相关文章
|
1月前
|
XML Java 开发者
Spring Boot中的AOP实现
Spring AOP(面向切面编程)允许开发者在不修改原有业务逻辑的情况下增强功能,基于代理模式拦截和增强方法调用。Spring Boot通过集成Spring AOP和AspectJ简化了AOP的使用,只需添加依赖并定义切面类。关键概念包括切面、通知和切点。切面类使用`@Aspect`和`@Component`注解标注,通知定义切面行为,切点定义应用位置。Spring Boot自动检测并创建代理对象,支持JDK动态代理和CGLIB代理。通过源码分析可深入了解其实现细节,优化应用功能。
|
23天前
|
Java 应用服务中间件 Spring
SpringBoot 响应请求是串行还是并行?
Spring Boot 在默认情况下通过 Servlet 容器的线程池实现并行处理 HTTP 请求。通过适当的线程池配置,可以进一步优化并发性能。此外,Spring Boot 提供了异步处理机制(如使用 `@Async` 注解)和反应式编程模型(Spring WebFlux),使得应用能够处理更高的并发负载。在具体项目中,可以根据需求选择合适的处理模型,以充分利用 Spring Boot 的并发处理能力。
55 21
|
1月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
81 8
|
3月前
|
监控 安全 Java
什么是AOP?如何与Spring Boot一起使用?
什么是AOP?如何与Spring Boot一起使用?
111 5
|
3月前
|
安全 Java 数据安全/隐私保护
如何使用Spring Boot进行表单登录身份验证:从基础到实践
如何使用Spring Boot进行表单登录身份验证:从基础到实践
91 5
|
3月前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
76 1
|
3月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
53 0
|
5月前
Micronaut AOP与代理机制:实现应用功能增强,无需侵入式编程的秘诀
AOP(面向切面编程)能够帮助我们在不修改现有代码的前提下,为应用程序添加新的功能或行为。Micronaut框架中的AOP模块通过动态代理机制实现了这一目标。AOP将横切关注点(如日志记录、事务管理等)从业务逻辑中分离出来,提高模块化程度。在Micronaut中,带有特定注解的类会在启动时生成代理对象,在运行时拦截方法调用并执行额外逻辑。例如,可以通过创建切面类并在目标类上添加注解来记录方法调用信息,从而在不侵入原有代码的情况下增强应用功能,提高代码的可维护性和可扩展性。
106 1
|
3月前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
467 1
什么是AOP面向切面编程?怎么简单理解?
|
3月前
|
XML Java 开发者
论面向方面的编程技术及其应用(AOP)
【11月更文挑战第2天】随着软件系统的规模和复杂度不断增加,传统的面向过程编程和面向对象编程(OOP)在应对横切关注点(如日志记录、事务管理、安全性检查等)时显得力不从心。面向方面的编程(Aspect-Oriented Programming,简称AOP)作为一种新的编程范式,通过将横切关注点与业务逻辑分离,提高了代码的可维护性、可重用性和可读性。本文首先概述了AOP的基本概念和技术原理,然后结合一个实际项目,详细阐述了在项目实践中使用AOP技术开发的具体步骤,最后分析了使用AOP的原因、开发过程中存在的问题及所使用的技术带来的实际应用效果。
91 5

热门文章

最新文章