2016-08-26 3 views
0

Как изменить параметр запроса (@RequestParam String bar) перед входом в контроллер?Аннотации для изменения параметра запроса

В идеале я хотел бы создать аннотацию:

@RequestMapping(method = GET, path = "foo") 
public ResponseEntity<String> getBar(@RequestParam @Sanitize("bar") String bar) { 

    // bar is sanitized 

    /** method body *// 
} 

Согласно to this question, я попытался создать интерфейс Sanitize:

@Target(ElementType.PARAMETER) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface Sanitize { 
    String value(); 
} 

И резольвер SanitizeResolver

public class SanitizeResolver implements HandlerMethodArgumentResolver { 

    @Override 
    public boolean supportsParameter(MethodParameter parameter) { 
     return parameter.getParameterAnnotation(Sanitize.class) != null; 
    } 

    @Override 
    public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, 
            NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { 
     Sanitize attr = parameter.getParameterAnnotation(Sanitize.class); 
     return MyUtils.sanitize(webRequest.getParameter(attr.value())); 
    } 
} 

И t о добавьте распознаватель в распознаватель мой WebMvcConfigurerAdapter «s:

@Override 
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { 
    argumentResolvers.add(new SanitizeResolver()); 
} 

Разрешитель хорошо добавлен, но никогда не звонил.

Я пользуюсь Spring 4.2.6.RELEASE. Я что-то пропущу, а если не могу работать, есть ли лучшее решение?

+0

На данный момент преобразователь для '@ RequestParam' выбирается _before_ ваш пользовательский резольвер. –

+0

Спасибо за ваш ответ. Так что в настоящее время нет способа достичь этого, я думаю? – Pleymor

+1

Избавьтесь от '@ RequestParam'. –

ответ

0

Решение должно было удалить @RequestParam, спасибо Sotirios Delimanolis!

Смежные вопросы