spring-boot
Servicios de descanso
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
- Cree un proyecto utilizando STS (Spring Starter Project) o Spring Initializr (en https://start.spring.io ).
- 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.
- 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() {}
}
- Cree la clase UserController y agregue
@Controller
,@RequestMapping
anotaciones
@Controller
@RequestMapping(value = "api")
public class UserController {
}
- 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);
}
- 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;
}
Ejecute la aplicación [por
mvn clean install spring-boot:run
] y llame a esta URLhttp://localhost:8080/api/users
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 usamosResponseEntity
, implementaremos las mismas funciones anteriores pero utilizando@RestController
yResponseEntity
@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:
- Jersey (JAX-RS)
- 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.