Micronaut http server


En este artículo estudiaremos los distintos llamados http que podemos trabajar con micronaut, crearemos un servidor con distintos llamados y pruebas.

oscar Escrito por oscar 23 March 2023 739 0

Crear un controlador (controller)

Podemos encontrar toda la documentación en Micronaut (HTTP Server).

Micronaut incluye API de servidor HTTP y cliente sin bloqueo basadas en Netty.

Veamos un ejemplo:

import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/hello")
public class HelloController {

    @Get(produces = MediaType.TEXT_PLAIN)
    public String index() {
        return "Hello World";
    }
}

Llamados GET

Código Documentación
@Get("/simpleGet")
public String simpleGet() {
    return "simpleGet";
}

simpleGet

Esta es la petición y respuesta básicas, observamos que realizamos el llamado GET, con la URL "/simpleGet", esta petición tiene las siguientes caracteristicas:

@Get(value = "/peticionGetRetornaTextoPlano", produces = MediaType.TEXT_PLAIN)
public String peticionGetRetornaTextoPlano() {
    return "peticionGetRetornaTextoPlano";
}

peticionGetRetornaTextoPlano

Tiene las mismas caracteristicas que simpleGet, en este caso, alteramos lo siguiente:

  • Cambiamos la respuesta con "produces", para que sea una respuesta de tipo MediaType.TEXT_PLAIN.
@Get(value = "/getPathVariable/{numero}")
public String getPathVariable(@PathVariable Integer numero) {
    return "getPathVariable:" + numero;
}

getPathVariable

Podemos usar variables de ruta de acceso por medio de la URI Micronauta (Enrutamiento).

  • En la anotación GET podemos incrustar la variable con el formato {VARIABLE}.
  • Con la anotación PathVariable podemos podemos pasar el argumento a una variable.
@Get(uris = {"/persona/{nombre}", "p/{nombre}"})
public String getPathVariableUris(@PathVariable String nombre) {
    return "getPathVariableUris:" + nombre;
}

getPathVariableUris

Podemos usar varias URIs para recibir diferentes llamados GET a una misma función, las caracteristicas de este llamado son:

  • Se añaden las uris con la siguiente sintaxis uri = {"/var1", "/var2"}
  • Se pueden añadir variables como se observa en getPathVariable
@Get("/getHttpResponse")
public HttpResponse<Respuesta> getHttpResponse() {
    Error error = new Error();
    error.setCodigo("campo");
    error.setMensaje("Error en este campo");
    List<Error> errores = new ArrayList<>();
    errores.add(error);
    Respuesta respuesta = new Respuesta();
    respuesta.setMensaje("Se presentaron los siguientes errores");
    respuesta.setErrores(errores);
    return HttpResponse.ok(respuesta);
}

getHttpResponse

Podemos dar una respuesta de un objeto y este por defecto se muestra en JSON, Para ello usamos a HttpResponse<T> quien crea una respuesta http.

  • HttpResponse.ok genera la respuesta 200 de http.

Llamados POST

Código Documentación
@Post("/simplePost")
public String simplePost() {
    return "simplePost";
}

simplePost

Esta petición es el básico de POST, tiene las siguientes caracteristicas:

@Post("/postBody")
public String postBody(@Body Contacto contacto) {
    return contacto.getNombre();
}

postBody

Se puede hacer una petición tanto GET como POST enviando por el body un objeto json

@Post("/postBodyHttpResponse")
public HttpResponse postBodyHttpResponse(@Body Contacto contacto) {
    return HttpResponse.ok();
}

postBodyHttpResponse

La respuesta de esta solicitud, por defecto es de tipo "application/json". Micronauta (Tipo de contenido de respuesta)

@Post("/postHttpRequestResponse")
public HttpResponse postHttpRequestResponse(@Body Contacto contacto) {
    Respuesta respuesta = new Respuesta();
    respuesta.setMensaje(contacto.getNombre());
    return HttpResponse.ok(respuesta);
}

postHttpRequestResponse

 

@Post(value = "/postHttpConsumesProduces", 
    consumes = MediaType.APPLICATION_FORM_URLENCODED, 
    produces = MediaType.APPLICATION_JSON)
public HttpResponse<Contacto> postHttpConsumesProduces(
    @Body Contacto contacto) {
    return HttpResponse.created(contacto);
}

postHttpConsumesProduces

En esta petición post, estamos recibiendo la información de un formulario con el MediaType.APPLICATION_FORM_URLENCODED Micronaut (Accepted Request Content-Type)

 


Comentario

Debe aceptar antes de enviar