java - repositoryrestresource - spring data rest page param name
El uso de la anotación RepositoryRestResource para cambiar el punto final RESTful no funciona (3)
Soy nuevo en el arranque de primavera. Estaba intentando crear un servicio web RESTful que también se conecta a MongoDB. Todo funciona bien como explica la guía, excepto por esto.
package hello.requests;
import java.util.List;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import hello.models.CustomerModel;
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface CustomerRepository extends MongoRepository<CustomerModel, String> {
List<CustomerModel> findByLastName(@Param("name") String name);
}
Aquí estoy tratando de cambiar el punto final RESTful para el repositorio de los modelos /customerModels
predeterminados a /people
. Pero cuando ejecuto esto, obtengo 404 si intento /people
pero funciona bien para /customerModels
. En un sentido más amplio, ¿cómo funciona @RepositoryRestResource
? ¿Qué estoy haciendo mal aquí?
No puede usar la barra diagonal dentro del atributo de path
, pero puede establecer la ruta base en application.properties :
# DATA REST (RepositoryRestProperties)
spring.data.rest.base-path=/my/base/uri
# Base path to be used by Spring Data REST to expose repository resources.
Sin ver su configuración completa, es difícil saber exactamente qué está sucediendo en su situación. Sin embargo, al utilizar la guía más reciente en https://github.com/spring-guides/gs-accessing-data-mongodb.git puedo hacer que funcione haciendo los siguientes cambios:
Adición de spring-boot-starter-data-rest como una dependencia en el archivo POM.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency>
Adición de esta anotación a la clase CustomerRepository.
@RepositoryRestResource(path = "people")
Configuración de captadores y definidores en la clase Cliente para los 2 campos de nombre en el constructor para evitar un error de serialización de Jackson.
Usando esto cuando ejecuto la aplicación, puedo acceder al repositorio en http://localhost:8080/people . Si elimino la anotación, se accede al CustomerRepository en http://localhost:8080/customers . Avísame si quieres que publique un tenedor en GitHub.
Para responder a su pregunta sobre qué RepositoryRestResource es que reemplaza los atributos para el ResourceMapping que se crea de forma predeterminada. Sus atributos se utilizan para crear la asignación y cambiar los valores de retorno relacionados de los métodos en la clase de asignación. Por defecto, Spring Data Rest crea valores predeterminados basados en los nombres de clase de los objetos utilizados en la definición del repositorio.
/customerModels
se genera de forma predeterminada porque su método predeterminado devuelve una lista de CustomerModel
. Entonces, puede intentar agregar este @RestResource(path = "names")
a su método y luego acceder a él como: http://localhost:8080/yourapp/people/search/names
. Mira aquí: documentos de datos de primavera