Spring 自定义注解 ElementType.PARAMETER

鶴嘯九天 发布于 2017/09/06 20:32
阅读 105
收藏 1

1.使用Valid进行验证时,是如何切入到Person这个类中的,具体实现的源码可否告知!

public String index(@Valid @RequestBody Person person, BindingResult result) {
        return "恭喜你了";  
 }

 

2.1自定义一个注解,如下:

@Target({ METHOD, FIELD, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface Help {
}

2.2:实现如下代码:

public class HelpMethodArgumentResolver implements HandlerMethodArgumentResolver{

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        return parameter.hasParameterAnnotation(Help.class);
    }

    @Override
    public Object resolveArgument(MethodParameter parameter,
            ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
            WebDataBinderFactory binderFactory) throws Exception {
             ......................   
    }

}

2.3 添加如下自定义注解:

 @RequestMapping("/")
    public String index(@Help @RequestBody Person person, A a) {
        return "恭喜你了";  
    }

问题:

1.Valid 的实现机制是否和我自定义的一致,如果不一致,请告知源代码逻辑!

2.在2.3的步骤里,我将@Help和@RequestBody放在一起使用时,我2.2的步骤中parameter的下标是直接从1开始,而不是0开始的;也就意味着我获取不到person了;请问问题出在哪里?或者有什么解决方案!

 

加载中
0
追忆100
追忆100

@Valid ,需要配置spring的method 拦截器,你在spring xml文件中增加配置:

<bean class="org.springframework.validation.beanvalidation.MethodValidationPostProcessor" />
鶴嘯九天
鶴嘯九天
回复 @追忆100 : 是的,有2点我不明白: 1.valid区别于aop动态切入的机制是什么; 2.自定义注解+@requestbody+HandlerMethodArgumentResolver一起用的时候(如上代码) 为何parameter就获取不到自定义注解的那个对象了
追忆100
追忆100
回复 @鶴嘯九天 : 你是问spring 对@valid注解生效的原理吗?
鶴嘯九天
鶴嘯九天
能说一说 valid 的具体实现吗,对于参数的拦截而不受@requestBody的影响
返回顶部
顶部