Buscar..


Parámetros

Anotación Columna
@Controlador Indica que una clase anotada es un "Controlador" (controlador web).
@RequestMapping Anotación para mapear solicitudes web en clases de manejadores específicos (si usamos con clase) y / o métodos de manejador (si usamos con métodos).
method = RequestMethod.GET Tipo de métodos de solicitud HTTP
Cuerpo de Respuesta La anotación que indica un valor de retorno del método debe estar vinculada al cuerpo de respuesta web
@RestController @Controller + ResponseBody
@ResponseEntity Extensión de HttpEntity que agrega un código de estado HttpStatus, podemos controlar el código http de retorno

Creación de un servicio REST

  1. Cree un proyecto utilizando STS (Spring Starter Project) o Spring Initializr (en https://start.spring.io ).
  2. Agregue una dependencia web en su pom.xml:
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

o escriba web en el cuadro de búsqueda Search for dependencies , agregue la dependencia web y descargue el proyecto comprimido.

  1. Crear una clase de dominio (es decir, usuario)
 public class User {
    
        private Long id;
    
        private String userName;
    
        private String password;
    
        private String email;
    
        private String firstName;
    
        private String lastName;
    
        public Long getId() {
            return id;
        }
    
        public void setId(Long id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        public String getEmail() {
            return email;
        }
    
        public void setEmail(String email) {
            this.email = email;
        }
    
        public String getFirstName() {
            return firstName;
        }
    
        public void setFirstName(String firstName) {
            this.firstName = firstName;
        }
    
        public String getLastName() {
            return lastName;
        }
    
        public void setLastName(String lastName) {
            this.lastName = lastName;
        }
    
        @Override
        public String toString() {
            return "User [id=" + id + ", userName=" + userName + ", password=" + password + ", email=" + email
                    + ", firstName=" + firstName + ", lastName=" + lastName + "]";
        }
    
        public User(Long id, String userName, String password, String email, String firstName, String lastName) {
            super();
            this.id = id;
            this.userName = userName;
            this.password = password;
            this.email = email;
            this.firstName = firstName;
            this.lastName = lastName;
        }
    
        public User() {}
    }
  1. Cree la clase UserController y agregue @Controller , @RequestMapping anotaciones
    @Controller
    @RequestMapping(value = "api")
    public class UserController {
    }
  1. Defina la variable de usuarios de la lista estática para simular la base de datos y agregar 2 usuarios a la lista
    private static List<User> users = new ArrayList<User>();

    public UserController() {
        User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
        User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
        users.add(u1);
        users.add(u2);
    }
  1. Crear un nuevo método para devolver a todos los usuarios en la lista estática (getAllUsers)
    @RequestMapping(value = "users", method = RequestMethod.GET)
    public @ResponseBody List<User> getAllUsers() {
         return users;
    }
  1. Ejecute la aplicación [por mvn clean install spring-boot:run ] y llame a esta URL http://localhost:8080/api/users

  2. Podemos anotar la clase con @RestController , y en este caso podemos eliminar el ResponseBody de todos los métodos de esta clase, (@RestController = @Controller + ResponseBody) , un punto más podemos controlar el código http de retorno si usamos ResponseEntity , implementaremos las mismas funciones anteriores pero utilizando @RestController y ResponseEntity

@RestController
@RequestMapping(value = "api2")
public class UserController2 {

    private static List<User> users = new ArrayList<User>();

    public UserController2() {
        User u1 = new User(1L, "shijazi", "password", "[email protected]", "Safwan", "Hijazi");
        User u2 = new User(2L, "test", "password", "[email protected]", "test", "test");
        users.add(u1);
        users.add(u2);
    }
    
    @RequestMapping(value = "users", method = RequestMethod.GET)
    public ResponseEntity<?> getAllUsers() {
       try {
           return new ResponseEntity<>(users, HttpStatus.OK);
       } catch (Exception e) {
           return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
       }
    }
}

ahora intente ejecutar la aplicación y llame a esta URL http: // localhost: 8080 / api2 / users

Creando un servicio de descanso con JERSEY y Spring Boot

Jersey es uno de los muchos marcos disponibles para crear servicios de descanso. Este ejemplo le mostrará cómo crear servicios de descanso con Jersey y Spring Boot.

1. Configuración del proyecto

Puede crear un nuevo proyecto utilizando STS o utilizando la página Spring Initializr . Mientras creas un proyecto, incluye las siguientes dependencias:

  1. Jersey (JAX-RS)
  2. Web

2. Crear un controlador

Permítanos crear un controlador para nuestro servicio web de Jersey.

@Path("/Welcome")
@Component
public class MyController {
    @GET
    public String welcomeUser(@QueryParam("user") String user){
        return "Welcome "+user;
    }    
}

@Path("/Welcome") indica al marco que este controlador debe responder a la ruta URI / Welcome

@QueryParam("user") indica al marco que estamos esperando un parámetro de consulta con el nombre user

Configuraciones de Jersey de cableado

Ahora configuremos Jersey Framework con Spring Boot: org.glassfish.jersey.server.ResourceConfig una clase, en lugar de un componente spring que se extiende org.glassfish.jersey.server.ResourceConfig :

@Component
@ApplicationPath("/MyRestService")
public class JerseyConfig extends ResourceConfig {
    /**
     * Register all the Controller classes in this method 
     * to be available for jersey framework
     */
    public JerseyConfig() {
        register(MyController.class);
    }

}

@ApplicationPath("/MyRestService") indica al marco que solo las solicitudes dirigidas a la ruta /MyRestService deben ser manejadas por el marco de Jersey, otras solicitudes deben continuar siendo manejadas por el marco de Spring.

Es una buena idea anotar la clase de configuración con @ApplicationPath , de lo contrario, todas las solicitudes serán manejadas por Jersey y no podremos omitirlas y dejar que un controlador de resorte lo maneje si es necesario.

4. Hecho

Inicie la aplicación y active una URL de muestra como (asumiendo que ha configurado Spring Boot para ejecutarse en el puerto 8080):

http://localhost:8080/MyRestService/Welcome?user=User

Debería ver un mensaje en su navegador como:

Bienvenido Usuario

Y ya ha terminado con su servicio web de Jersey con Spring Boot.

Consumir una API REST con RestTemplate (GET)

Para consumir una API REST con RestTemplate , cree un proyecto de inicio Spring con el inicio bootzr Spring y asegúrese de que se agrega la dependencia Web :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Una vez que haya configurado su proyecto , cree un bean RestTemplate . Puede hacer esto dentro de la clase principal que ya se ha generado, o dentro de una clase de configuración separada (una clase anotada con @Configuration ):

@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

Después de eso, cree una clase de dominio, similar a lo que debe hacer al crear un servicio REST .

public class User {
    private Long id;
    private String username;
    private String firstname;
    private String lastname;

    public Long getId() {
        return id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getFirstname() {
        return firstname;
    }

    public void setFirstname(String firstname) {
        this.firstname = firstname;
    }

    public String getLastname() {
        return lastname;
    }

    public void setLastname(String lastname) {
        this.lastname = lastname;
    }
}

En su cliente, autowire el RestTemplate :

@Autowired
private RestTemplate restTemplate;

Para consumir una API REST que devuelve un solo usuario, ahora puede usar:

String url = "http://example.org/path/to/api";
User response = restTemplate.getForObject(url, User.class);

Al consumir una API REST que devuelve una lista o una matriz de usuarios, tiene dos opciones. O bien consumirlo como una matriz:

String url = "http://example.org/path/to/api";
User[] response = restTemplate.getForObject(url, User[].class);

O consumirlo usando la ParameterizedTypeReference :

String url = "http://example.org/path/to/api";
ResponseEntity<List<User>> response = restTemplate.exchange(url, HttpMethod.GET, null, new ParameterizedTypeReference<List<User>>() {});
List<User> data = response.getBody();

Tenga en cuenta que, cuando use ParameterizedTypeReference , tendrá que usar el método más avanzado RestTemplate.exchange() y tendrá que crear una subclase. En el ejemplo anterior, se utiliza una clase anónima.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow