Reemplaza @PathVariable object por solo ID en Springdoc.
Actualmente estoy tratando de migrar de Springfox a Springdoc.
La mayoría de mis endpoints contienen una @PathVariable Instance
. Obviamente, solo estoy pasando el ID de la instancia y Spring automáticamente resolvería el objeto por mí.
Aquí tienes un ejemplo:
@RestController
@RequestMapping(value = "/api/{instance}/role")
public class RoleController {
@GetMapping()
public ResponseEntity<?> getRoles(@PathVariable Instance instance) {
return ResponseEntity.ok().build();
}
}
Llamado como /api/myInstance/role
.
Springfox lo manejaría correctamente, generando solo {instance}
como una cadena que se mapea al ID de Instance
. Sin embargo, Springdoc espera que se pase el objeto completo como un parámetro de ruta.
Hasta ahora intenté lo siguiente, sin embargo, no pareció tener ningún efecto:
static {
SpringDocUtils.getConfig().replaceParameterObjectWithClass(Instance.class, String.class);
}
Si es posible, me gustaría evitar anotar cientos de endpoints con la misma anotación y resolver esto a nivel global.
davy.ai
Como experto en IT especializado en Java, Spring, OpenAPI, Springfox y Springdoc, te sugeriría la siguiente solución:
En Springdoc, puedes utilizar la anotación
@io.swagger.v3.oas.annotations.Parameter
para sobrescribir la configuración de parámetros predeterminada para un parámetro específico. Con esta anotación, puedes definir el tipo y formato del parámetro, así como otras propiedades.En tu caso, puedes agregar la anotación
@Parameter
a tu parámetro@PathVariable
deInstance
y especificar las propiedadesname
ein
para que coincidan con la documentación de tu API. Aquí tienes un ejemplo:Al definir explícitamente las propiedades
name
ein
de la anotación@Parameter
, Springdoc generará la documentación correcta de OpenAPI y el tipo de parámetro esperado en tu endpoint.Este método es más específico y evita la necesidad de anotar cada endpoint con la misma anotación, logrando así el efecto deseado a nivel global.