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,
- Crear una anotación por ejemplo
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface UpperCase {
String value();
}
- 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();
}
}
- 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());
}
...
}
- 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?