首页 > 解决方案 > Spring AOP:字段验证不起作用

问题描述

我有一个 Jersey 资源类,它对标头参数使用字段验证。

@Controller
@RequiredArgsConstructor
public class Resource {

    @Min(value = 0)
    @HeaderParam("id")
    private int id;

    @HeaderParam("Authorization")
    private String header;

    @Authenticate
    public void get() {
    }

}

然后我在@Authenticate 注释处创建一个切入点。

public class Aspect {

    @Before("@annotation(Authenticate)")
    public void doAuthenticate() {
    }

}

问题是在创建 Aspect 之后,id 的字段验证不再起作用(传入 -1 作为 id 标头不会违反约束)。

我猜原因是由于Spring AOP使用CGLIB作为代理,它在创建代理时不会填充字段,所以一个默认值被传递给验证,然后在退出Aspect之后,它已经退出验证阶段,因此验证不起作用。

所以我的问题是: 1. 我理解正确吗?2. 我怎样才能使现场验证工作?

标签: springaopspring-aopbean-validation

解决方案


推荐阅读