Curso de Java MVC | Web Service

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.

Jax RS

JAX-RS (Java API for RESTful Web Services) es una especificación de Java que define una API para crear servicios web RESTful (Representational State Transfer) en Java.

Jersey + Jackson

Jersey es un framework open source para el desarrollo de servicios web REST. Es una implementación de Jax RS.

Jackson es una librería que permite serializar objetos.

Creación de un Web Service sencillo

Creamos un proyecto Maven con las siguientes dependencias en el pom.xml:

<dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.1.1</version>
</dependency>

<dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.25.1</version>
</dependency>
<dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-jackson</artifactId>
        <version>2.25.1</version>
</dependency>

ServicioUsers.java

@Path("/users")
public class ServicioUsers {
 
    private static List<User> listaUsuarios = new ArrayList<User>() {
        {
            add(new User("Rosa", "Marfil"));
            add(new User("Pepito", "Grillo"));
            add(new User("Manuela", "Lago"));
        }
    };
 
    /**
     * URL: http://localhost:8080/API_REST_WS-RS/api/users
     * @return Response list Users
     */
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public Response getUsers() {
        return Response.ok(listaUsuarios).build();
    }
 
 
    /**
     * URL: http://localhost:8080/API_REST_WS-RS/api/users/Rosa
     * 
     * @param name String
     * @return Response
     */
    @GET
    @Path("/{name}")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response getUserById(@PathParam("name") String name) {
        User found = null;
        // ...
        if (found == null) {
            return Response.status(Status.BAD_REQUEST).entity("User not found").build();
        } else {
            return Response.ok(found).build();
        }
    }
 
    /**
     * URL: http://localhost:8080/API_REST_WS-RS/api/users/createUser Parameters in
     * Postman: {"name":"Rosa3333","username":"Marfi3333l"}
     * 
     * @param User
     * @return Response list NOTA: Si no existe el constructor vacío de User, da un
     *         error y el userRequest viene null.
     */
    @POST
    @Path("/createUser")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response createUser(User userRequest) {

        // ...
        return Response.ok(listaUsuarios).build();
 
    }
 
    /**
     * URL: http://localhost:8080/API_REST_WS-RS/api/users/updateUser Parameters in
     * Postman: {"name":"Rosa","username":"Marfil3333"}
     * 
     * @param User
     * @return user modified NOTA: Si no existe el constructor vacío de User, da un
     *         error y el userRequest viene null.
     */
    @PUT
    @Path("/updateUser")
    @Consumes(MediaType.APPLICATION_JSON)
    @Produces(MediaType.APPLICATION_JSON)
    public Response updateUser(User userUpdate) {
        // ...
 
        if (found == null) {
            return Response.status(Status.BAD_REQUEST).entity("User not found").build();
        } else {
            found.setUsername(userUpdate.getUsername());
            return Response.ok(found).build();
        }
    }
 
    /**
     * URL: http://localhost:8080/API_REST_WS-RS/api/users/deleteUser/Rosa
     * 
     * @param User
     * @return Response
     */
    @DELETE
    @Path("/deleteUser/{name}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response deleteUser(@PathParam("name") String name) {
        ...

        if (found == null) {
            return Response.status(Status.BAD_REQUEST).entity("User not found").build();
        } else {
            return Response.ok(listaUsuarios).build();
        }
    }
 
}

Application.java

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
 
 
@ApplicationPath("api")
public class Configuration extends Application {
}

Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.