Comment réparer « ne peut pas être jeté à javax.servlet.Servlet » erreur en essayant d'emballer REST App Servlet

file d'attente:

Je suis en train d'installer angulaire 7 avec un projet java maven basé back-end en un seul fichier de guerre. En ce moment je suis en train de configurer le web.xmlfichier où j'ai actuellement ce problème. Je ne sais pas du tout si mon approche est valide ou « bonne » donc je vais d' abord décrire ce que je suis en train de faire (si vous pensez mieux sur cet aspect s'il vous plaît ne me correct).
J'ai donc quelques JAX-RScours que je voudrais servir REST API. A cet effet , je l' ai créé correspondant des javax.ws.rs.core.Applicationclasses pour fournir ces composants REST. Ensuite , je suis notamment les Applicationclasses dans le web.xmlfichier. Voici les fichiers:

web.xml

 <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <url-pattern>/rmz/*</url-pattern>
  </servlet-mapping>

Une autre variante de web.xmlce que j'ai essayé

 <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

  <servlet>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <servlet-class>backend.backendservice.StammSolvaraJahrRestApplication</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>backend.backendservice.StammSolvaraJahrRestApplication</param-value>
    </init-param>
  </servlet>

  <servlet-mapping>
    <servlet-name>backend.backendservice.StammSolvaraJahrRestApplication</servlet-name>
    <url-pattern>/rmz/*</url-pattern>
  </servlet-mapping>

Classe d'application

public class StammSolvaraJahrRestApplication extends Application {

  @Override
  public Set<Class<?>> getClasses() {
    Set<Class<?>> sets = new HashSet<>();
    sets.add(StammSolvaraJahrRest.class);
    return sets;
  }

}

L'erreur que je reçois est: java.lang.ClassCastException: backend.backendservice.StammSolvaraJahrRestApplication cannot be cast to javax.servlet.Servletet si je retire le <servlet-class>puis je vais obtenir No servlet class has been specified for servlet. Je suivais https://docs.oracle.com/cd/E24329_01/web.1211/e24983/configure.htm#RESTF183 et comment déployer une application JAX-RS? entre autres , mais il ne semble pas fonctionner.

Emanuel Ramirez:

Il existe deux façons de définir votre servlet JAX-RS.

1) avec une application comme celle-classe que vous avez, vous pouvez sauter la configuration web.xml et il suffit d'ajouter l'annotation d'application

@ApplicationPath("resources")
public class StammSolvaraJahrRestApplication extends Application

2) Avec web.xml config

<servlet>
    <display-name>JAX-RS Servlet</display-name>
    <servlet-name>package.hierarchy.StammSolvaraJahrRestApplication</servlet-name>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>package.hierarchy.StammSolvaraJahrRestApplication</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>JaxRSServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

Si vous sautez le mappage de servlet de la dernière, il utilisera votre votre @ApplicationPathvaleur spécifiée ou "/resources"si la précédente est manquante.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=236607&siteId=1
conseillé
Classement