2

このコード行を使用してリンクを生成する場合:

indexResource.add(linkTo(IndexController.class).withSelfRel());

この JSON が生成されます。

{
  "links" : [ {
    "rel" : "self",
    "href" : "http://localhost:8080"
  } ]
}

ただし、Spring Data Rest によって生成されるリソース リンクは、次の JSON を生成します。

{
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/persons{?page,size,sort}",
      "templated" : true
    }
  }
}

特に、Spring Data Rest で作成されたものを真似したいと思います。どうすればいいですか?

次の構成で Spring Boot を使用しています。

@Configuration
@Import(RepositoryRestMvcConfiguration.class)
@EnableAutoConfiguration
@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)
@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL)
@ComponentScan
public class Application { ... }

保持または削除@EnableHypermediaSupport(type = EnableHypermediaSupport.HypermediaType.HAL)しても何も変わらないようです。

次のgradle依存関係もあります。

compile "org.springframework.boot:spring-boot-starter-data-rest"
compile "org.springframework.boot:spring-boot-starter-data-jpa"
compile "org.springframework.boot:spring-boot-starter-actuator"
compile "org.springframework.boot:spring-boot-starter-jetty"
compile "org.springframework.data:spring-data-envers:0.2.0.RELEASE"
compile "org.hibernate:hibernate-envers:4.3.6.Final"
runtime "mysql:mysql-connector-java:5.1.32"
testCompile "junit:junit"
4

4 に答える 4

1

Spring Data Rest は HAL 形式を使用します。これは、Spring HATEOAS の新しいバージョンのデフォルトである必要があります。構成クラスの注釈を使用してアクティブ化できます。

@EnableHypermediaSupport(type= {HypermediaType.HAL})

アップデート

Spring Bootでも同様の状況に遭遇しました。my に以下を追加する必要がありましたpom.xml

<dependency>
  <groupId>org.springframework.plugin</groupId>
  <artifactId>spring-plugin-core</artifactId>
  <version>1.1.0.RELEASE</version>
</dependency>
于 2014-09-19T11:19:38.867 に答える
1

HAL 形式の JSON を生成するには、HTTP リクエストで application/hal+json を受け入れる必要があります (つまり、Accept ヘッダーは application/hal+json です)。

アプリケーションのデフォルトのコンテンツ タイプが application/json である場合もあります。次の構成クラスを使用して、デフォルトのコンテンツ タイプを application/hal+json に変更できます。

public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer c) {
        c.defaultContentType(MediaTypes.HAL_JSON);
    }
}
于 2015-07-02T15:55:18.600 に答える
0

Link と Self.Link のような 2 つのクラスを作成することをお勧めします。Link には Self があります。Self には href とテンプレートがあります。リンクの形成を行うクラスを Java オブジェクトとして作成します。次に、GSON などの Java to Json ライブラリを使用して、上記と同様の出力を取得します。

于 2014-09-19T04:51:21.660 に答える