一.Aop的话,首先声明一个自定义注解,然后编写切面方法;
@Target({ElementType.TYPE, ElementType.METHOD})
@Inherited
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Cut {
}
@Cut
@Interceptor
public class AopConfig {
@AroundInvoke
public Object cut(InvocationContext context) throws Exception {
System.out.println("Interceptor");
return context.proceed();
}
}
只有环绕切面类型;使用的话将注解放到需要切的类或方法上;
二.参数验证:
加入依赖:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-hibernate-validator</artifactId>
</dependency>
写入参数校验注解:
@NotNull(message = "名称不能为空")
private String name;
@NotNull(message = "年龄不能为空")
private Integer age;
@NotNull(message = "生日不能为空")
private LocalDateTime birthday;
在控制层使用:
(1)使用注解方式:
@Path("save")
@POST
@Cut
public Object list(@Valid XUser xUser) {
return Arrays.asList(xUser);
}
}
(2)使用注入参数校验器,手动校验:
@Inject
Validator validator;
@Path("save")
@POST
@Cut
public Object list(XUser xUser) {
Set<ConstraintViolation<XUser>> validate = validator.validate(xUser);
if (!validate.isEmpty()) {
for (ConstraintViolation<XUser> userConstraintViolation : validate) {
return userConstraintViolation.getMessage();
}
}
return Arrays.asList(xUser);
}