Annotazione personalizzata Spring per i parametri di richiesta

Vorrei scrivere annotazioni personalizzate, che modificherebbero la richiesta di spring oi parametri del percorso in base alle annotazioni. Ad esempio invece di questo codice:

@RequestMapping(method = RequestMethod.GET) public String test(@RequestParam("title") String text) { text = text.toUpperCase(); System.out.println(text); return "form"; } 

Potrei fare annotazioni @UpperCase:

 @RequestMapping(method = RequestMethod.GET) public String test(@RequestParam("title") @UpperCase String text) { System.out.println(text); return "form"; } 

È ansible e se lo è, come potrei farlo?

Come hanno detto i ragazzi nei commenti, puoi facilmente scrivere il tuo risolutore personalizzato basato sull’annotazione. Quattro semplici passaggi,

  1. Crea un’annotazione es

 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface UpperCase { String value(); } 
  1. Scrivi un resolver per es

 public class UpperCaseResolver implements HandlerMethodArgumentResolver { public boolean supportsParameter(MethodParameter parameter) { return parameter.getParameterAnnotation(UpperCase.class) != null; } public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { UpperCase attr = parameter.getParameterAnnotation(UpperCase.class); return webRequest.getParameter(attr.value()).toUpperCase(); } } 
  1. registrare un resolver

      

o la configurazione java

  @Configuration @EnableWebMvc public class Config extends WebMvcConfigurerAdapter { ... @Override public void addArgumentResolvers(List argumentResolvers) { argumentResolvers.add(new UpperCaseResolver()); } ... } 
  1. usa un’annotazione nel tuo metodo di controllo es

 public String test(@UpperCase("foo") String foo)