java - mvc - ¿Cómo personalizar Spring Data REST para usar una ruta de varios segmentos para un recurso de repositorio?
spring java tutorial (2)
Estoy desarrollando una aplicación CRUD basada en componentes utilizando Spring Data JPA y Spring Data REST. Tengo varios componentes. Por ejemplo , el componente del sistema tiene el modelo de User
y el UserRepository
. Los componentes se diferencian por los nombres del paquete. como com.example.app.<component_name>
Entonces, para hacer que mi API REST se vea más limpia, necesito implementar la URL API como se muestra a continuación.
host:8080/<component_name>/<model_collection_name>
por ejemplo
host:8080/system/users
Hice lo siguiente en mi repositorio
@RepositoryRestResource(collectionResourceRel = "users", path = "system/users")
public interface UserRepository extends PagingAndSortingRepository<User, Long> {
...
}
esto genera lo siguiente, cuando voy a http://localhost:8080
{
"_links": {
"users": {
"href": "http://localhost:8080/system/users{?page,size,sort}",
"templated": true
},
...
Pero cuando voy a http://localhost:8080/system/users
Da un error
Viernes 22 de mayo 17:56:37 IST 2015 Hubo un error inesperado (tipo = No encontrado, estado = 404). No hay mensajes disponibles
NOTA : Si asigné la ruta a system-users
, funciona bien, pero cuando uso un /
en la ruta, como el system/users
, se rompe y muestra el error.
tl; dr
No soportado.
Detalles
En términos generales, no se centre en el diseño de URL. La estructura de un URI no debe importar a un cliente REST por definición:
En ningún momento el software del servidor o del cliente necesita saber o comprender el significado de un URI; simplemente actúa como un conducto a través del cual el creador de un recurso (una autoridad de nombres humanos) puede asociar representaciones con la semántica identificada por el URI.
(de Roy Fielding - Estilos arquitectónicos y el diseño de arquitecturas de software basadas en red - Sección 6.2.4 )
Si sigues ese criterio, te ocupas de elegir los nombres de las relaciones, diseñar las representaciones de los recursos que expones, etc.
Dicho esto, lo que estás buscando actualmente no es compatible. Si crees que vale la pena agregar esta característica (creo que no es así, debido a la discusión anterior), no dudes en abrir un ticket en nuestro rastreador de errores .
Probablemente sea bastante complicado de implementar debido a la forma en que funciona el mapeo Spring MVC y, especialmente, la combinación de mapeo de segmentos de caminos singulares y no singulares podría causar algunas ambigüedades. Todo eso hace que sea bastante improbable que esta solicitud reciba seguimiento.
Creo que esta pregunta (o: una pregunta similar) ya fue respondida aquí en .
Establezca el uri base utilizando una clase RepositoryRestMvcConfiguration personalizada.