Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

308
Vistas
Spring Boot Controller - Enum parámetro como valor

Tengo un controlador de arranque de primavera, uno de mis parámetros es un Enum. La enumeración tiene un valor de cadena. Quiero pasar como parámetro el valor del enum y que el controlador me dé el Enum. Se puede hacer esto?

 @RequestMapping(value = "/") public MyResponse getResponse ( @RequestParam(value = "version") final ProjectVersion version ) { ...bla bla bla... } public enum ProjectVersion { VERSION_1 ("1.00") VERSION_2 ("2.00") private final String version; ProjectVersion ( String version ) { this.version = version; } @Override public String toString() { return this.version; } }

Quiero poder hacer una solicitud de la siguiente manera:

http://mihost.com/miruta?version=1.00

Y obtener en el controlador ProjectVersion.VERSION_1

¿Algunas ideas?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto no es posible como es. Debe crear su convertidor personalizado para convertir de String a ProjectVersion .

Por ejemplo, primero define el convertidor de String a ProjectVersion :

 public class ProjectVersionConverter implements ConditionalGenericConverter { @Override public boolean matches(TypeDescriptor sourceType, TypeDescriptor targetType) { return targetType.getType().equals(ProjectVersion.class); } @Override public Set<ConvertiblePair> getConvertibleTypes() { return Collections.singleton(new ConvertiblePair(String.class , ProjectVersion.class)); } @Override public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return ProjectVersion.findByVersion((String)source); } }

Entonces regístralo:

 @Configuration public class CustomWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter { @Override public void addFormatters(FormatterRegistry registry) { registry.addConverter(new ProjectVersionConverter()); } }

Puede omitir el registro si define ProjectVersionConverter como un bean Spring. (Este código no ha sido probado).

about 4 years ago · Santiago Trujillo Denunciar

0

Debido a que necesita pasar (para cada solicitud) el argumento al método Controller , la solución limpia sería usar HandlerMethodArgumentResolver , de modo que el contenedor Spring pueda inyectar dinámicamente su argumento ProjectVersion al método Controller como se muestra a continuación:

Clase ProjectVersionArgumentResolver :

 public class ProjectVersionArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter methodParameter) { return methodParameter.getParameterType().equals(ProjectVersion.class); } @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { return ProjectVersion.fromString(nativeWebRequest.getParameter("version")); } }

Clase Spring-boot ApplicationLauncher:

 public class MyProjectApplicationLauncher extends WebMvcConfigurerAdapter { @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) { //add the new resolver argumentResolvers.add(new MyMethodArgumentResolver()); } public static void main(String[] args) { SpringApplication.run(MyProjectApplicationLauncher.class, args); } }

Clase ProjectVersion :

 public enum ProjectVersion { //add your existing code //Add fromString method to convert string to enum public static ProjectVersion fromString(String input) { for (ProjectVersion projectVersion : ProjectVersion.values()) { if (projectVersion.version.equals(input)) { return projectVersion; } } return null; } }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda