Spring héritier du contrôleur MVC et le routage

Dans mon Spring MVC webapp j'ai un générique Reposant contrôleur pour les opérations CRUD. Et chaque béton contrôleur a dû déclarer seulement un @RequestMappingpar exemple /foo. Contrôleur générique manipulé toute demande d' /foo et /foo/{id}.

Mais maintenant j'ai besoin d'écrire un peu plus complexe contrôleur CRUD qui aura plus de demande de paramètres ou de variables de chemin d'accès, l'adresse e.g /foo/{date} et /foo/{id}/{date}. Donc, je prolonger mon générique contrôleur CRUD et écrire surchargé fetch(id, date) méthode qui permettra de traiter à la fois {id} et {date}. Ce n'est pas un problème.

Mais j'ai aussi besoin de "désactiver" fetch(id) mise en œuvre dérivée à partir de la classe de base (ressources ne doivent pas être disponible à /foo/{id} plus qu'à /foo/{id}/{date}). La seule idée qui m'est venu est de remplacer cette méthode dans ma béton contrôleur de la carte sur un faux uri et retour null. Mais cela ressemble plutôt moche sale hack car nous exposer quelques faux ressource uri, plutôt que de le désactiver. Peut-être il y a une meilleure pratique?

Des idées?

//My generic CRUD controller
public abstract class AbstractCRUDControllerBean<E, PK extends Serializable> implements AbstractCRUDController<E, PK> {

  @RequestMapping(method=RequestMethod.GET)
  public @ResponseBody ResponseEntity<E[]> fetchAll() { ... }

  @RequestMapping(value="/{id}", method=RequestMethod.GET)
  public @ResponseBody ResponseEntity<E> fetch(@PathVariable("id") PK id) { ... }

  @RequestMapping(method=RequestMethod.POST)
  public @ResponseBody ResponseEntity<E> add(@RequestBody E entity) { ... }

  @RequestMapping(value="/{id}", method=RequestMethod.PUT)
  public @ResponseBody ResponseEntity<E> update(@PathVariable("id") PK id, @RequestBody E entity) { ... }

  @RequestMapping(value="/{id}", method=RequestMethod.DELETE)
  public @ResponseBody ResponseEntity<E> remove(@PathVariable("id") PK id) { .. }
} 

.

//Concrete controller, working with Foo entities
@Controller
@RequestMapping("/foo")
public class FooControllerImpl extends
        AbstractCRUDControllerBean<Foo, Long> implements FooController { 

  //ugly overriding parent's method
  @RequestMapping(value="/null",method=RequestMethod.GET)
  public @ResponseBody ResponseEntity<Foo> fetch(@PathVariable("id") PK id) { 
    return null;
  }

  //new fetch implementation
  @RequestMapping(value="/{id}/{date}", method=RequestMethod.GET)
  public @ResponseBody ResponseEntity<Foo> fetch(@PathVariable("id") PK id, @PathVariable("date") Date date) { .... }

}

source d'informationauteur Nofate