Angular如何使用REST处理来自Spring JPA数据的数据

时间:2019-02-20 12:39:01

标签: json angular spring rest spring-data-jpa

我按照spring的官方链接使用jpa构建了一个rest服务器。这与浏览器oder chrome postman扩展名配合良好。

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服务器的响应。 因为格式是HAL-超文本应用程序语言。 看起来像:

        {

      "_embedded" : {

        "persons" : [ {

          "firstName" : "name1",

          "lastName" : "name2",

          "_links" : {

            "self" : {

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

            },

            "person" : {

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

            }

          }

        }, 

.......

人员数组中没有ID。

如何使用angular处理这种格式? 我应该自己写JavaScript代码吗? 如果是这样,如何从有角httpclient的结果中获取原始JSON数据?

我尝试编写spring控制器以返回Angular的常规JSON,并且可以正常工作。 但是以这种方式,我失去了Spring JPA信息库的好处,例如PagingAndSortingRepository,CrudRepository和JpaRepository。

我要保留纯弹性和角度特征,只是更改角度服务以获取数据。

2 个答案:

答案 0 :(得分:0)

定义包装类:

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

然后将其用于调用Spring REST服务器:

httpClient.get<PersonsWrapper>(url).pipe(
    map(w => w._embedded.persons)
  ).subscribe(persons => ...);

答案 1 :(得分:0)

我想我可能不清楚地谈论这个问题。所以我再次研究了这个问题。 原始的spring jpa rest示例给出的结果如下 enter image description here

在获取和设置Person类的ID之后,并添加接口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

使用您的方法可以获取正确的数据