案例1:
1.demand,排除某个接口的日志输出,用自定义注解@NoHealth,只要有该注解的方法,切面日志忽略该方法。
2.code
NoHealth interface:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author li
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface NoHealth {
}
Aspect class:
排除有该注解的方法!@annotation(NoHealth)
@Component
@Aspect
public class ControllerAspect extends AbstractAspect {
private static CxLogger logger = CxLogManager.getLogger(ControllerAspect.class).defaultTag("type", "ControllerAspect");
private static final String INBOUND = "INBOUND";
@Pointcut("execution(* com.xxx.xxx.xxx.controller..*(..))&&!@annotation(NoHealth)")
private void controllerPointCut() {
}
//*******other
}
controller
/**
* @author li
*/
@RestController
public class HealthCheckController {
private static CxLogger logger = CxLogManager.getLogger(AccessController.class).tag("type", "controller");
@GetMapping("/_health")
@NoHealth
public String check() {
return "OK";
}
}
/**********************分割线******************************/
案例2:
需求:一个自定义注解,接收参数只能是‘-+数字’最长20位 的 属性注解@MobilePhone
定义类:
package com.cathaypacific.ird2.iam.validator;
import org.apache.commons.lang.StringUtils;
import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.*;
import java.util.regex.Pattern;
/**
* Desc:
*
* @author daxing.li
* @create 2019-06-26 14:50
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {MobilePhone.MobilePhoneConstraintValidator.class})
@Documented
public @interface MobilePhone {
String message() default "Invalid MobilePhone Number";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
public static class MobilePhoneConstraintValidator implements ConstraintValidator<MobilePhone, String> {
public MobilePhoneConstraintValidator(){
}
@Override
public void initialize(MobilePhone constraintAnnotation){
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if (StringUtils.isEmpty(s)) {
return true;
} else {
return Pattern.matches("^[-+0-9]{0,20}$", s);
}
}
}
}
2.应用:
xxxRequest.class
@Getter
@Setter
public void xxxRequest{
@MobilePhone(message = "MobilePhone only for 'numbers and - +',and length cannot exceed 20 characters")
@JsonProperty("mobile_phone")
private String mobilePhone;
}
本文介绍了一种使用自定义注解@NoHealth排除特定接口日志输出的方法,以及一个用于验证手机号格式的自定义注解@MobilePhone,确保输入符合特定规则。
1237

被折叠的 条评论
为什么被折叠?



