2015-07-24 8 views
15

Jestem nowy w Spring boot. Próbowałem stworzyć usługę sieciową RESTful, która również podłącza się do MongoDB. Wszystko działa dobrze, jak wyjaśnia przewodnik, z wyjątkiem tego.Używanie adnotacji RepositoryRestResource do zmiany RESTful endpoint nie działa

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); 

} 

Tutaj staram się zmienić relaksującego końcowy dla repozytorium z domyślnego /customerModels do /people. Ale kiedy to uruchomię, otrzymam 404, jeśli spróbuję /people, ale działa dobrze dla /customerModels. W szerszym znaczeniu, w jaki sposób działa @RepositoryRestResource? Co ja tu robię źle?

+0

można udostępniać konfiguracje? –

+0

Czy możesz opracować? Jest to mniej więcej na podstawie tego wiosennego przewodnika. https://spring.io/guides/gs/accessing-mongodb-data-rest/ – Codevalley

+0

czy sprawdziłeś swoją kolekcję mongodów "ludzie"? Btw możesz udostępniać swoje logi na ten temat, jeśli wystąpi wyjątek, gdy 404. –

Odpowiedz

4

Bez zobaczenia całej konfiguracji trudno jest dokładnie określić, co dzieje się w Twojej sytuacji. Jednak przy użyciu najnowszej instrukcji w https://github.com/spring-guides/gs-accessing-data-mongodb.git mogę dostać pracy poprzez wprowadzenie następujących zmian:

  • Dodawanie wiosna-boot-rozrusznik-data-resztę jako zależność w pliku POM.

    <dependency> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-starter-data-rest</artifactId> 
    </dependency> 
    
  • Dodanie tej adnotacji do klasy CustomerRepository.

    @RepositoryRestResource(path = "people") 
    
  • Konfigurowanie pobierające i ustawiające w klasie od klienta w tym 2 pola Nazwa w konstruktora, aby uniknąć błędu serializacji Jackson.

Używając tego podczas uruchamiania aplikacji, mam dostęp do repozytorium pod numerem http://localhost:8080/people. Jeśli usunę adnotację, dostęp do CustomerRepository uzyska pod adresem http://localhost:8080/customers. Daj mi znać, jeśli chcesz, żebym wysłał widelec na GitHub.

Aby odpowiedzieć na pytanie, czym jest RepositoryRestResource, zastępuje on atrybuty domyślnie utworzone dla ResourceMapping. Jego atrybuty są używane podczas tworzenia mapowania i zmiany powiązanych wartości zwracanych metod na klasie odwzorowania. Domyślnie Spring Data Rest tworzy wartości domyślne na podstawie nazw klas obiektów użytych w definicji repozytorium.

3

/customerModels jest generowany domyślnie, ponieważ domyślna metoda zwraca listę CustomerModel. Możesz więc spróbować dodać tę @RestResource(path = "names") do swojej metody, a następnie uzyskać do niej dostęp: http://localhost:8080/yourapp/people/search/names. Spójrz tutaj: Spring data docs

3

Nie można używać ukośnik wewnątrz atrybutu path, ale można ustawić ścieżkę bazową w 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. 
+1

To zadziałało dla mnie, ale jest to podstawowa ścieżka nie bazowa-uri – dough

+0

masz rację, poprawiłem to, dziękuję – wildloop

Powiązane problemy