一些乱七八糟的技巧吧
import org.hibernate.validator.constraints.NotEmpty;
@NotEmpty(message = “姓名必填”)
@PostMapping("/create")
public ResultVO<Map<String, String>> create(@Valid OrderForm orderForm,
BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
log.error("【创建订单】参数不正确, orderForm={}", orderForm);
throw new SellException(ResultEnum.PARAM_ERROR.getCode(),
bindingResult.getFieldError().getDefaultMessage());
}
@Min(value=18,message=”未成年进制入内”)
Private int age;//这样可以拦截,然后再controller中,参数对象前面加@Valid注解,错误信息会放在BindingResult bindResult这个对象里
(@Valid Girl girl,BindingResult bindResult){
if(bindResult.hasErrors()){
system.out.println(bindResult.getFieldError.getDefaultMessage());
}
}
@JsonIgnore加在属性值上在转为json时忽略该属性
@DynamicUpdate加在类上,就是数据库字段设置为timestamp类型时,createtime和updatetime会自动更新
public class ProductInfo {
下面是真正使用aop步骤
maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>1.5.3.RELEASE</version>
</dependency>
package com.imooc.aspect;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
//todo boke
@Aspect
@Component
@Slf4j
public class HttpAspect {
/**
* 这样不用在每个before , after上面都写一次路径了
*/
@Pointcut("execution(public * com.imooc.controller.HelloController.*(..))")
public void log(){
}
@Before("log()")
public void doBefore(JoinPoint joinPoint){
/**
* HttpServletRequest javax.servlet.http.HttpServletRequest;
*/
ServletRequestAttributes attributes=(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request=attributes.getRequest();
//url
log.info("url={}",request.getRequestURL());
//method
log.info("method={}",request.getMethod());
//ip
log.info("ip={}",request.getRemoteAddr());
//获取请求的哪个类的哪个方法
log.info("class_method={}",joinPoint.getSignature().getDeclaringTypeName()+"."+joinPoint.getSignature().getName());
//参数
log.info("args={}",joinPoint.getArgs());
System.out.println("before");
}
@After("log()")
public void logAfter(){
System.out.println("after");
}
/**
* 获取切点方法的返回值
* @param object
*/
@AfterReturning(returning = "object",pointcut = "log()")
public void doAfterReturning(Object object){
log.info("response={}",object);
}
}