2012-05-04 14 views
8

Ho un regolatore di primavera/POJO in questo modo:Posso sovrascrivere @RequestMapping su un tipo per un metodo?

@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!"; 
    } 
} 

In questo scenario, l'URL per MyDebugPing è /foo/debug/ping. Tuttavia, voglio che sia /debug/ping, ignorando efficacemente il RequestMapping sulla classe.

È possibile?

risposta

5

Basta rimuovere l'annotazione @RequestMapping dalla classe e utilizzare percorsi completi per singoli metodi. Per esempio.

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!"; 
    } 
} 

Se esistono molti metodi, è sufficiente spostare il metodo su un altro controller.

+1

Grazie. Questo è il mio piano B. Ci sono circa una dozzina di metodi, quindi cercherò di evitarlo se posso. –

+0

Ho aggiornato la mia risposta. Puoi spostare il metodo dalla classe (ad esempio nello stesso pacchetto per poter accedere ai metodi protetti o al pacchetto visibile). Richiederà un po 'di lavoro (cambia privato in pacchetto visibile ecc.). –

Problemi correlati