java 切面 金额 校验,【Springboot之切面编程】通过切面AOP实现入参校验

最简洁、最少侵入实现接口入参校验

目录

实现入参校验Aop

使用入参校验Aop

演示

实现入参校验Aop

1.定义一个入参基类

package com.param.validate.aop;

/**

* 基础请求基类

*

* @author: zetting

* @date: 2018/8/22 7:15

*/

public class Request {

}

2.实现入参校验切面

package com.param.validate.aop;

import com.param.validate.base.BusinessCode;

import org.aspectj.lang.JoinPoint;

import org.aspectj.lang.annotation.Aspect;

import org.aspectj.lang.annotation.Before;

import org.aspectj.lang.annotation.Pointcut;

import org.springframework.core.annotation.Order;

import org.springframework.stereotype.Component;

import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;

import javax.annotation.Resource;

import javax.validation.ConstraintViolation;

import javax.validation.groups.Default;

import java.util.Iterator;

import java.util.Set;

/**

* controller 层入参校验切面

*

* @Author zetting

* @Date 2017/11/15 21:50

**/

@Order(2)

@Component

@Aspect

public class ValidatorAspect {

@Resource

private LocalValidatorFactoryBean localValidatorFactoryBean;

public ValidatorAspect() {

}

/**

* 方式1:切入点(

*/

@Pointcut(

"@annotation(org.springframework.web.bind.annotation.RequestMapping)" +

"||@annotation(org.springframework.web.bind.annotation.GetMapping)" +

"||@annotation(org.springframework.web.bind.annotation.PostMapping)" +

"||@annotation(org.springframework.web.bind.annotation.PutMapping)"

)

// @Pointcut("execution(* com.*..controller.*.*(..))")//方式2

private void parameterPointCut() {

}

/**

* 处理

*

* @param joinPoint

* @param request

*/

@Before("parameterPointCut() && args(request,..)")

public void validateParameter(JoinPoint joinPoint, Request request) {

Set> validErrors = this.localValidatorFactoryBean.validate(request, new Class[]{Default.class});

Iterator iterator = validErrors.iterator();

StringBuilder errorMsg = new StringBuilder();

while (iterator.hasNext()) {

ConstraintViolation constraintViolation = (ConstraintViolation) iterator.next();

String error = constraintViolation.getPropertyPath() + ":" + constraintViolation.getMessage();

errorMsg.append(iterator.hasNext() ? error + "; " : error);

}

if (!validErrors.isEmpty()) {

throw new BusinessException(BusinessCode.PARAM_ILLEGAL, errorMsg.toString());

}

}

}

使用入参校验Aop

1.入参请求类集成基类Request并在相应字段加上校验注解

package com.param.validate.modules.dto;

import com.param.validate.aop.Request;

import org.hibernate.validator.constraints.NotBlank;

import javax.validation.constraints.NotNull;

/**

* 入参校验请求

*

* @author: zetting

* @date: 2018/12/19 22:16

*/

public class ValidateRequest extends Request {

/**

* 用户名

*/

@NotBlank

private String userName;

/**

*性别

*/

@NotNull

private Integer sex;

/**

* 地址

*/

private String address;

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public Integer getSex() {

return sex;

}

public void setSex(Integer sex) {

this.sex = sex;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

}

2.controller层正常使用、无需添加任何东西

package com.param.validate.modules.controller;

import com.param.validate.modules.dto.ValidateRequest;

import com.param.validate.base.Response;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

/**

* 切面实现入参校验

*/

@RestController

public class MyController {

@GetMapping(value = "/validate")

public Response validate(ValidateRequest request) {

return Response.success();

}

}

演示

1.入参不合法

a9e96e815b53

参数为空.jpg

2.入参合法

a9e96e815b53

校验通过.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值