restcontroller requestmapping redireccionar mvc getmapping delete java spring spring-mvc spring-annotations request-mapping

java - requestmapping - Anotación Spring personalizada para los parámetros de solicitud.



requestmapping spring boot (1)

Como dijeron los chicos en los comentarios, puede escribir fácilmente su resolución personalizada basada en anotaciones. Cuatro sencillos pasos,

  1. Crear una anotación por ejemplo

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

  1. Escribe un resolver por ejemplo

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. registrar un resolutor

<mvc:annotation-driven> <mvc:argument-resolvers> <bean class="your.package.UpperCaseResolver"></bean> </mvc:argument-resolvers> </mvc:annotation-driven>

o la configuración de Java

@Configuration @EnableWebMvc public class Config extends WebMvcConfigurerAdapter { ... @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { argumentResolvers.add(new UpperCaseResolver()); } ... }

  1. use una anotación en su método de control, por ejemplo

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

Me gustaría escribir anotaciones personalizadas, que modificarían los parámetros de solicitud o ruta de Spring de acuerdo con las anotaciones. Por ejemplo en lugar de este código:

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

Podría hacer la anotación @UpperCase:

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

¿Es posible y si lo es, cómo podría hacerlo?