es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reactividad primaveral sin utilizar la clase de entidad

Necesito exponer puntos finales reactivos, es decir, Flux/Mono en Spring+Java. Sin embargo, no quiero usar la clase Entity como definición, ya que la clase Entity puede cambiar constantemente y podemos tener la necesidad de registrar nuevas clases Entity de forma dinámica.

¿Existe alguna forma de implementar puntos finales reactivos en Spring sin una clase Entity?

Estoy utilizando Spring+Java y Mongodb.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, es posible implementar puntos finales reactivos de Spring sin usar una clase de entidad. Un enfoque posible es utilizar clases DTO (Objeto de Transferencia de Datos) basadas en Mapa para representar los datos de entrada y salida. De esta manera, el DTO puede diseñarse para cumplir los requisitos actuales de la API, y se pueden agregar nuevos DTO según sea necesario sin afectar la base de código existente.

    Para manejar las interacciones con MongoDB, puedes utilizar el controlador reactivo proporcionado por Spring Data MongoDB. Puedes definir interfaces de repositorio reactivas que extiendan ReactiveCrudRepository y proporcionar las clases DTO apropiadas como tipos genéricos. De esta manera, el controlador mapeará automáticamente los datos de entrada a los DTO, y puedes devolver instancias de DTO desde los puntos finales reactivos.

    Aquí tienes un ejemplo de fragmento de código:

    import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
    import org.springframework.stereotype.Repository;
    import reactor.core.publisher.Flux;
    import reactor.core.publisher.Mono;
    
    @Repository
    public interface MyRepository extends ReactiveMongoRepository<><string, object="">, String> {
    
    }
    
    @Controller
    public class MyController {
    
        private final MyRepository repository;
    
        public MyController(MyRepository repository) {
            this.repository = repository;
        }
    
        @GetMapping("/my-endpoint")
        public Flux<><string, object="">> getMyData() {
            return repository.findAll();
        }
    
        @PostMapping("/my-endpoint")
        public Mono<><string, object="">> addMyData(@RequestBody Map<string, object=""> myData) {
            return repository.insert(myData);
        }
    
        // Otros puntos finales reactivos según sea necesario
    }
    

    En este ejemplo, el repositorio extiende ReactiveMongoRepository con tipos genéricos de Map<string, object=””> (para los datos de entrada/salida) y String (para el campo de ID). El controlador define dos puntos finales reactivos, GET /my-endpoint y POST /my-endpoint, que devuelven/aceptan instancias de Map<string, object=””>. El controlador mapea automáticamente los datos de entrada a los DTO Map<string, object=””>, y el repositorio devuelve/acepta estos DTO de forma transparente.</string,></string,></string,></string,></string,></string,></string,>

Comments are closed.