Je tente d'écrire un exemple de service REST dans Java en utilisant des annotations au lieu d'un descripteur de déploiement.Exposer la ressource REST sous forme conditionnelle
@ApplicationPath("/services")
public class RestApp extends Application {
@Override
public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<>();
classes.add(Request.class);
return classes;
}
}
Un échantillon Demander classe
@Path("sequence-numbers")
public class Request {
@POST
@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
@Consumes(MediaType.APPLICATION_JSON)
public Response createInstance(SnsConfig snsConfig, @Context final HttpServletResponse servletResponse,
@Context final HttpServletRequest servletRequest) {
}
}
Si classes.add (Request.class) est supprimé à partir du code du @Path ("séquence numéros") ne doit pas être exposé. Mais même lorsque je commente l'instruction classes.add, la méthode post est frappée lors de l'envoi d'une requête. Est-ce que mon utilisation des annotations est incorrecte ou y a-t-il quelque chose d'autre qui puisse causer cela?
Éditer: J'ai essayé de commenter la méthode getClasses entière et cela fonctionne toujours. Je suppose que si aucune classe n'est spécifiée sous @ApplicationPath, tous les fichiers sont analysés pour la présence de @Path. La raison pour laquelle je voulais utiliser getClasses était de vérifier certaines conditions spécifiques à l'application et de décider d'ajouter ou non un class/@ Path. Existe-t-il un moyen d'exposer une ressource REST basée sur une condition?
Oui, je retournais un ensemble vide et c'était le problème. J'ai publié la classe correspondant à @ApplicationPath au lieu de retourner un ensemble vide et cela fonctionne très bien. – kishore