web-dev-qa-db-fra.com

Comment spécifier plusieurs noms de package pour les classes de service dans REST service web utilisant Jersey

Comment spécifier plusieurs <param-value> pour un <param-name> donné sous la balise <init-param> du servlet. Voici mon fichier web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Java.Sun.com/xml/ns/javaee" xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>com.vogella.jersey.first</display-name>
 <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <!-- Register resources and providers under com.vogella.jersey.first package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.vogella.jersey.first</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
  </servlet-mapping>
</web-app> 

Le paramètre jersey.config.server.provider.packages définit dans quel package Jersey recherchera les classes de service Web. 

Je veux spécifier plusieurs noms de package ici, car mes classes de service sont dans des packages différents. Quelque chose comme suit, mais aucun d'entre eux ne fonctionne:

1) Plusieurs <param-value>

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.vogella.jersey.first</param-value>
    <param-value>com.vogella.jersey.second</param-value>
</init-param>

2) Plusieurs <init-param>

<servlet>
    ...
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.vogella.jersey.first</param-value>
    </init-param>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.vogella.jersey.second</param-value>
    </init-param>

Comment puis-je faire cela?

12
Learner

vous ne pouvez pas spécifier plusieurs <param-value> pour un seul <param-name>.

utilisez ceci à la place:

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.pack.first;com.pack.rest.second</param-value>
</init-param>

;, , peuvent être utilisés comme séparateurs.

22
Ramanlfc

Grâce à la réponse de Ramanlfc, vous pouvez aussi utiliser "," comme séparateur de paquet Par exemple:

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.pkg.first,com.pkg.second</param-value>
</init-param>

Testé sous Ubuntu 16.04.2, Tomcat-8.5.11

1
Jonathan L

Vous pouvez spécifier plusieurs noms de package pour les classes de service dans le service Web REST à l'aide de Jersey de plusieurs façons. En plus de la réponse mentionnée par Ramanlfc, \n fonctionne également.

<servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>
            com.demo1.resources
            com.demo2.resources
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
0
Michael Wang