es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Accede a @PathVariables desde el @RequestMapping del padre.

Estoy tratando de acceder a los @PathVariables definidos en el @RequestMapping padre de “MyClass”.
Escenario simplificado:

@RestController
@RequestMapping(value = "some/path/{with}/{multiple}/{variables}")
public class ParentClass {...}

Esta clase es una especie de clase base de un producto y no debe ser modificada. Por lo tanto, estoy extendiendo ‘ParentClass’. En ‘MyClass’ quiero hacer algo como esto:

@GetMapping("/{another}")
public Object get(@PathVariable("another") String another) {...}

Creo que esto está permitido (aún no lo he probado), pero no veo cómo obtener todos los PathVariables que ya están definidos con ‘ParentClass’.

Cualquier idea/ referencia al RTFM sobre eso es muy apreciada.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para acceder a los @PathVariables definidos en la clase principal @RequestMapping, puedes usar la palabra clave super para referenciar la anotación @RequestMapping de la clase principal y acceder a su atributo de valor. Luego puedes concatenar el valor de la clase principal con el valor de la clase hija para crear el camino completo de la URL. Aquí tienes un ejemplo en código:

    @RestController
    @RequestMapping(value = "alguna/ruta/{con}/{multiples}/{variables}")
    public class ClasePadre {...}
    
    @RestController
    @RequestMapping(value = "otra/ruta")
    public class MiClase extends ClasePadre {
    
      @GetMapping("/{otra}")
      public Object obtener(@PathVariable("otra") String otra, HttpServletRequest request) {
        String rutaPadre = super.getClass().getAnnotation(RequestMapping.class).value()[0];
        String caminoCompleto = rutaPadre + "/{" + otra + "}";
    
        // Usa la variable caminoCompleto para tu lógica
        ...
      }
    }
    

    En el ejemplo anterior, utilizamos el método getClass() con la palabra clave super para obtener la anotación @RequestMapping de la clase ClasePadre. Luego accedemos a su atributo de valor y lo concatenamos con /{otra} para crear el camino completo de la URL. La variable caminoCompleto luego puede ser utilizada para cualquier lógica en el controlador.

Comments are closed.