Ambigu méthodes de gestionnaire pour http chemin?

J'ai un traitement au Printemps où j'ai déclaré ma classe comme ceci:

@Controller
@RequestMapping(value = "/rest/api/datasources/", produces = MediaType.APPLICATION_JSON_VALUE, method=RequestMethod.GET)
public class MetadataServiceController {
    //Two separate methods:
    @RequestMapping(value="{datasourceName}")
    public Object getLatestApiMetadata(@PathVariable String datasource, 
           @RequestParam (required = false)  String datasourceNum,
           @RequestParam (defaultValue = "true")  String dataFields, 
           @RequestParam ( required=false, defaultValue = "api")  String visibility){
      ... //Implementation here
    }

    @RequestMapping(value="{apiVersion}")
    public @ResponseBody List<DataSource> getAllMetadata(
        @RequestHeader(value="sub-version", required=false, defaultValue="0.0") String minorVer,
        @PathVariable String restApiVersion,
        @RequestParam(required = false) String datasourceNum,
        @RequestParam(defaultValue = "all") String visibility)
        throws ObjectNotFoundException {
    ... //Implementation here
    }

}

Mais quand j'essaie d'atteindre l'un de ces repos des points de terminaison, j'obtiens un message d'erreur disant: java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path et il spécifie ces deux méthodes comme la question. J'étais sous l'impression que si je change les paramètres de la requête, le Printemps ne serait pas se plaindre de la même chose via ce post: http://www.coderanch.com/t/598675/Spring/handling-HTTP-Request-parameters mais à l'évidence cela ne fonctionne toujours. Quelqu'un aurait-il des suggestions sur la façon de contourner ce problème? Merci!

  • Si j'envoie une demande à http://your.server/rest/api/datasources/foo, la méthode doit être appelée? Que diriez -http://your.server/rest/api/datasources/bar?
  • ah oui, mais je n'ai pas de spécifier un autre jeu de paramètres de la demande pour les chemins?
  • Non, tu n'a absolument pas à voir ma réponse.
  • Vous n'avez pas spécifié quelque chose de différent. Si vous voulez itinéraire en fonction de paramètres de la requête, puis ajouter le params attribut à la RequestMapping annotation, actuellement, à partir d'une cartographie de point de vue il n'y a rien de différent.
  • je suis juste confus ensuite parce que je pensais que @RequestParam voudrais faire cela pour moi. J'ai regardé stackoverflow.com/questions/13715811/... et qui semble dire que le @RequestParam annotation est en effet pour le routage basé sur les paramètres.
InformationsquelleAutor user1871869 | 2015-09-29