web-dev-qa-db-fra.com

Comment insérer des données à partir de la base de données avec le service Web dans Java à l'aide de JAX - RS

Je suis nouveau sur les services Web. S'il vous plaît donner des suggestions comment insérer et récupérer des données de la base de données à l'aide de Jersey Jax - Rs en Java?

13
spt

Jetez un coup d'œil à cela link , il existe un didacticiel vidéo qui explique d'une manière comment cela peut être fait.

La vidéo explique donc comment un service Web récupère une certaine valeur pour indiquer au client que les informations d'identification données correspondent à certaines données dans une base de données.

Voici comment la méthode qui gère la demande du client ressemble à:

@POST
    @Produces(MediaType.TEXT_PLAIN)
    @Path("/login")
    public Response login(@FormParam("email") String email, @FormParam("password") String password) {

        Response.ResponseBuilder responseBuilder = null;
        
        boolean result = entityFacade.doLogin(email, password);
        if (result) {
             responseBuilder = Response.ok("Success");//Login good!
        }
        else {            
            responseBuilder = Response.ok("Wrong credentials!");//Login bad!
        }

        return responseBuilder.build();
    }

Ce service Web transfère les informations d'identification vers la couche d'entreprise où une EJB effectuera une opération de sélection dans la base de données:

@Stateless
public class EntityFacade implements EntityFacadeLocal {

    @Resource
    private UserTransaction ut;
    private CredentialJpaController controller;

    @PostConstruct
    public void init() {        
        controller = new CredentialJpaController(ut, Persistence.createEntityManagerFactory("ROLEProject-ejbPU"));
    }


    public boolean doLogin(String email, String password){        
        return controller.loginWithParameters(email,password);
    }
}

L'EJB s'appuie dans une classe de service qui fera la tâche d'interagir avec la base de données

public class CredentialJpaController implements Serializable {

    public CredentialJpaController(UserTransaction utx, EntityManagerFactory emf) {
        this.utx = utx;
        this.emf = emf;
    }
    private UserTransaction utx = null;
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }
    public boolean loginWithParameters(String email, String password) {
        boolean result = false;
        EntityManager em = getEntityManager();
        Long l = (Long) em.createNamedQuery("loginquery").setParameter("emailParam", email).setParameter("passwordParam", password).getSingleResult();
        if (l == 1) {
            result = true;
        }
        return result;
    }
}

Enfin pour pouvoir interagir avec la DB, les données doivent être représentées comme une entité JPA. Pour être en mesure de repousser la ligne sélectionnée au client comme quel que soit le médiatype souhaité, l'entité doit contenir des annotations JAXB:

@XmlRootElement
@Entity
@Table(name = "CREDENTIALS")
@NamedQuery(name="loginquery", query="SELECT COUNT(c) FROM Credential c WHERE c.email = :emailParam AND c.password = :passwordParam")
public class Credential implements Serializable {

    @Id
    private String email;
    @Column(nullable = false)
    private String password;

    @XmlElement
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

     @XmlElement
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Voici quelques échantillons de code client afin que vous puissiez voir l'une des façons de la manière dont le service Web peut être appelé:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>TODO supply a title</title>
    </head>
    <body>
        <div>TODO write content</div>
        <form action="http://localhost:8080/ROLEProject-war/role/login" method="POST">
            Email <input name="email"/>
            Password <input type="password" name="password"/>
            <input type="submit"/>
        </form>
    </body>
</html>

J'espère que cela vous aidera à vous donner une idée.

Pour insérer des données, le processus est presque identique, il suffit d'utiliser la méthode persistante () au lieu de trouver () à partir du gestionnaire d'entité.

4
sfrj