2012-05-04 11 views
8

que tienen un resorte controlador/POJO como esto:¿Puedo anular @RequestMapping en un tipo para un método?

@RequestMapping("/foo"); 
public class MyController { 
    @RequestMapping("/bar") 
    public String MyAction() { return someSharedFunc(false); } 

    @RequestMapping("/debug/ping"); 
    public String MyDebugPing() { return someSharedFunc(true); } 

    private String someSharedFunc(boolean debug) { 
     if(debug) return "FooBar"; else return "Debug!"; 
    } 
} 

En este escenario, la dirección URL de MyDebugPing es /foo/debug/ping. Sin embargo, quiero que sea /debug/ping, haciendo caso omiso de RequestMapping en la clase.

¿Es esto posible?

Respuesta

5

Simplemente elimine la anotación @RequestMapping de la clase y use las rutas completas por métodos individuales. P.ej.

public class MyController { 
    @RequestMapping("/foo/bar") 
    public String MyAction() { return someSharedFunc(false); } 

    @RequestMapping("/debug/ping"); 
    public String MyDebugPing() { return someSharedFunc(true); } 

    private String someSharedFunc(boolean debug) { 
     if(debug) return "FooBar"; else return "Debug!"; 
    } 
} 

Si hay muchos métodos, puede simplemente mover el método a otro controlador.

+1

Gracias. Ese es mi Plan B. Hay alrededor de una docena de métodos, así que trataré de evitar eso si puedo. –

+0

Actualicé mi respuesta. Puede mover el método de la clase (por ejemplo, en el mismo paquete para poder acceder a métodos protegidos o visibles del paquete). Sin embargo, requerirá algo de trabajo (cambio de privado a paquete visible, etc.). –

Cuestiones relacionadas