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.

El controlador de Spring Boot no reconoce el “Path Variable” como opcional.

Utilizando Spring Boot, he implementado un RestController de la siguiente manera:

@RestController
@RequestMapping("/api/v1/student/img")
@CrossOrigin("*")
public class ProfilePictureController {

    @GetMapping("/{studentId}")
    public void getProfilePicture(@PathVariable(required = false) Long studentId, HttpServletResponse response) throws IOException {
        Optional<profilepicture> profilePicture;
        if (studentId != null) {
            profilePicture = studentService.getProfilePictureByStudentId(studentId);
        } else {
            profilePicture = studentService.getProfilePicture(1L);
        }
        if (profilePicture.isPresent()) {
            ServletOutputStream outputStream = response.getOutputStream();
            outputStream.write(profilePicture.get().getImage());
            outputStream.close();
        }
    }
}

Mi clase ProfilePicture contiene una variable “imagen”, que es de tipo byte[]. Estoy intentando recuperar esta variable.

En cualquier caso, el problema es que mi controlador no parece tratar a mi PathVariable como opcional. Si uso la API de fetch para enviar una solicitud GET con la siguiente URL:

const url = "http://localhost:8080/api/v1/student/img/";

Recibo un error:

'java.lang.String' to required type 'java.lang.Long'; nested exception is java.lang.NumberFormatException: For input string: "img"

¿Alguien sabe cuál podría ser el problema?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema es que la URL utilizada en la solicitud fetch-API no incluye el valor real para el PathVariable “studentId”.

    Debería ser `http://localhost:8080/api/v1/student/img/{studentId}`, donde {studentId} debería ser reemplazado por un ID real.

    Por ejemplo, si desea obtener la foto de perfil de un estudiante con ID 5, la URL debería ser `http://localhost:8080/api/v1/student/img/5`.

    Dado que el PathVariable “studentId” en el RestController se marca como “required = false”, seguirá funcionando si no se proporciona ningún ID en la URL y se utilizará un ID predeterminado de 1.

Comments are closed.