2017-05-22 2 views
1

Voici @RequestMapping « s produire une cartographie de la demande ambiguë pour un @RestController au printemps de démarrage 1.5/Java 8.@RequestMapping & Bound génériques Paramters

est-il un moyen de« Annulez la contrainte générique sur la méthode de poing ne pas inclure Iterable? Je préférerais conserver le même nom de méthode, le même chemin, etc. (c.-à-d.) Une publication avec un tableau irait à une méthode, et une publication d'un article unique irait à la seconde méthode.

@RequestMapping(method = RequestMethod.POST, value="/foo") 
public T save(T item){ 
    ... 
} 
@RequestMapping(method = RequestMethod.POST, value="/foo") 
public Iterable<T> save(Iterable<T> items){ 
    ... 
} 
+0

Avec les paramètres que vous ne pouvez pas définir le point de terminaison. – cralfaro

Répondre

2

Votre mappage est évidemment ambigu.

Vous devez spécifier un point de terminaison différent pour chaque type enregistré ou vous pouvez restreindre le mappage via des éléments de l'annotation @RequestMapping.

Par exemple, vous pourriez mettre en œuvre quelque chose comme ceci:

@RequestMapping(method = RequestMethod.POST, value="/foo", params="item") 
public T save(T item){ 
    ... 
} 
@RequestMapping(method = RequestMethod.POST, value="/foo", params="items") 
public Iterable<T> save(Iterable<T> items){ 
    ... 
} 

ou, en utilisant headers:

@RequestMapping(method = RequestMethod.POST, value="/foo", headers="Input-Type=item") 
public T save(T item){ 
    ... 
} 
@RequestMapping(method = RequestMethod.POST, value="/foo", headers="Input-Type=items") 
public Iterable<T> save(Iterable<T> items){ 
    ... 
} 
+0

super, pour une raison quelconque, je pensais que le «Type» de l'argument était suffisant pour surcharger la méthode. – eztinkerdreams