Как Angular обрабатывает данные из Spring JPA Data с помощью REST - PullRequest
0 голосов
/ 20 февраля 2019

Я следую весенним официальным ссылкам, собираю сервер отдыха с jpa.Это прекрасно работает с расширением браузера oder chrome.

https://spring.io/guides/gs/accessing-data-rest/

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

И вы хотите использовать Angular для отображения и обработки данных.Это основано на официальном примере с угловым героем.

Но я не могу обработать ответ от Spring JPA rest server.Потому что формат HAL - язык приложений гипертекста.Это выглядит так:

        {

      "_embedded" : {

        "persons" : [ {

          "firstName" : "name1",

          "lastName" : "name2",

          "_links" : {

            "self" : {

              "href" : "http://localhost:8080/persons/1"

            },

            "person" : {

              "href" : "http://localhost:8080/persons/1"

            }

          }

        }, 

.......

В массиве персон нет идентификатора.

Как я могу обработать этот формат с угловым?Должен ли я написать код JavaScript самостоятельно?Если да, то как получить исходные данные JSON из результата angular httpclient?

Я попытался написать контроллер пружины, чтобы вернуть нормальный JSON для Angular, и это работает.Но таким образом я утратил преимущества репозитория Spring JPA, такого как PagingAndSortingRepository, CrudRepository и JpaRepository.

Я хочу сохранить чистые пружинные и угловые функции и просто изменить угловой сервис для получения данных.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Я думаю, что могу говорить об этой проблеме не ясно.Поэтому я снова изучаю эту проблему.исходный пример пружинного jpa rest дает результат, подобный enter image description here

после получения и установки идентификатора для класса Person и добавления реализации интерфейса RepositoryRestConfigurer

//@Configuration
public class ExposeAllRepositoryRestConfiguration implements RepositoryRestConfigurer {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        // TODO Auto-generated method stub
//      RepositoryRestConfigurer.super.configureRepositoryRestConfiguration(config);
        config.exposeIdsFor(Person.class);
    }
}

(есть какой-то метод, который может добавить все классы моделей)

я получаю это

enter image description here

с помощью вашего метода я могу получить правильные данные

0 голосов
/ 20 февраля 2019

определить класс оболочки:

export class PersonsWrapper{
    _embedded: { person: Person[]};
}

, а затем использовать его для вызовов к серверу Spring REST:

httpClient.get<PersonsWrapper>(url).pipe(
    map(w => w._embedded.persons)
  ).subscribe(persons => ...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...