Как изменить параметр запроса (@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. Я что-то пропущу, а если не могу работать, есть ли лучшее решение?
На данный момент преобразователь для '@ RequestParam' выбирается _before_ ваш пользовательский резольвер. –
Спасибо за ваш ответ. Так что в настоящее время нет способа достичь этого, я думаю? – Pleymor
Избавьтесь от '@ RequestParam'. –