Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

[Duda] No me indica la Location en Insomnia

En la practica al finalizar el profesor muestra en el programa que usamos que regresa el id del registro nuevo con sus datos y en el apartado de Headers se muestra la Localicascion de la URL y aunque hace bien el registro no hace esos dos puntos, algun motivo en especial o error en el codigo Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadIngrese aquí la descripción de esta imagen para ayudar con la accesibilidad

import java.net.URI;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.util.UriComponentsBuilder;

import jakarta.transaction.Transactional;
import jakarta.validation.Valid;
import med.voll.api.direccion.DatosDireccion;
import med.voll.api.medico.DatosActualizarMedico;
import med.voll.api.medico.DatosListadoMedico;
import med.voll.api.medico.DatosRegistroMedico;
import med.voll.api.medico.DatosRespuestaMedico;
import med.voll.api.medico.Medico;
import med.voll.api.medico.MedicoRepository;
@RestController
@RequestMapping("/medicos")
public class MedicoController {
 @PostMapping
    public ResponseEntity<DatosRegistroMedico> registrarMedico(@RequestBody @Valid DatosRegistroMedico datosRegistroMedico,
                                            UriComponentsBuilder UriComponentsBuilder){
        System.out.println(datosRegistroMedico);
        Medico medico = medicoRepository.save(new Medico(datosRegistroMedico));
        DatosRespuestaMedico datosRespuestaMedico = new DatosRespuestaMedico(medico.getId(), medico.getNombre(), medico.getEmail(), 
                                                    medico.getTelefono(), medico.getEspecialidad().toString(), 
                                                    new DatosDireccion(medico.getDireccion().getCalle(), 
                                                    medico.getDireccion().getDistrito(), medico.getDireccion().getCiudad(),
                                                    medico.getDireccion().getNumero(), medico.getDireccion().getComplemento()));

        URI url = UriComponentsBuilder.path("/medicos/{id}").buildAndExpand(medico.getId()).toUri();
        return ResponseEntity.created(null).body(datosRegistroMedico); 
        }
    }
3 respuestas

hola como estas, fijate si en el (DTO) record DatosRespuestaMedico esta incluido el medico.getId() en los parametros del mismo.

ejemplo:

import med.voll.api.domain.direccion.DatosDireccion;

public record DatosRespuestaMedico(Long id, String nombre,String email,String telefono, String documento, String especialidad,DatosDireccion direccion) {

}

solución!

Además en esta linea: return ResponseEntity.created(null).body(datosRegistroMedico); no va null sino la url

seria asi: return ResponseEntity.created(url).body(datosRegistroMedico);

también se presta un poco a confucion que pongas de esta manera -->UriComponentsBuilder UriComponentsBuilder las dos con mayúscula, y se puede prestar a cometer errores el tipo de variable siempre con mayúscula y el nombre de la misma con minúscula, por ejemplo de tu mismo codigo: DatosRegistroMedico datosRegistroMedico. espero ser de ayuda!!! un abrazo

Muchas gracias Carlos me ayudaste a ver varios errores en mi codigo y a resolverlos El primer error con respecto a que no aparece el id a la hora del registro fue que no direccione correctamente la variable datosRespuestaMedico Los otros dos fueron exactamente lo que tu mencionaste en tu segundo comentario.