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?
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.