1

バニラ エンティティ ユーザー -

public class User implements Serializable {
    private static final long serialVersionUID = 262950482349139355L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(name = "FIRST_NAME", nullable = false, unique = false)
    @Convert(converter = NameConverter.class)
    private String firstName;

    @Column(name = "LAST_NAME", nullable = false, unique = false)
    @Convert(converter = NameConverter.class)
    private String lastName;

    @Column(name = "PHONE_NUM", nullable = false, unique = false)
    @Convert(converter = PhoneNumberConverter.class)
    private String phoneNum;

    @Column(name = "EMAIL", nullable = true, unique = false)
    @Convert(converter = OptionalStringConverter.class)
    private Optional<String> email;
}

URL でホスト名が変更された検索結果 - 2 つの _links が存在する

{
  "_links" : {
    "self" : {
      "href" : "http://hostname/users/search/findByLastName?lastName=doe{&page,size,sort}",
      "templated" : true
    }
  },
  "_embedded" : {
    "users" : [ {
      "firstName" : "John",
      "lastName" : "Doe",
      "phoneNum" : "111-111-1111",
      "email" : null,
      "_links" : { },
      "_embedded" : { },
      "_links" : {
        "self" : {
          "href" : "http://hostname/users/1",
          "templated" : false
        }
      }
    } ]
  },
  "page" : {
    "size" : 20,
    "totalElements" : 1,
    "totalPages" : 1,
    "number" : 0
  }
}

編集

リソースが単独でアクセスされる場合、重複するリンクは存在しません。ただし、クライアント (私の場合はマイクロサービス) が を使用してリクエストを行うRestTemplateと、上記のように 2 が返さ_linksれます。

@Override
public Collection<Long> getUserIdsByFirstName(String firstName) {
    String findByFirstNameUri = UriComponentsBuilder.fromUriString(userServiceUrl)
        .path("/users/search/findByFirstName").queryParam("firstName", firstName).toUriString();

// This is where ResponseEntity.body would have the 2 _links, if ResponseEntity<String> were used. I used a custom object to weed that out.
ResponseEntity<UserSearchResult> userSearchResult = restTemplate.exchange(findByFirstNameUri, GET, dummyEntity,
        UserSearchResult.class);
     ...
}

Spring Data JPA、Spring Data Rest、Spring HATEOAS、Spring Cloud を使用しています。これが私のGithubのプロジェクトへのリンクです。

完全な開示: Spring HATEOAS Github に問題を提出しました。

4

1 に答える 1

0

まず、spring-hateoas だけでなく、spring-data-rest を使用しています。したがって、リソースもコントローラーもありません。ここが大きな誤解だったと思います。

カスタム リポジトリに問題があると思います。

私は2つのことを変更します:

  • UserRepositoryCustomImpl から @Repository を削除します
  • UserRepository を UserRepositoryCustom に拡張する

それで

public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom

public class UserRepositoryCustomImpl implements UserRepositoryCustom

これは、カスタム リポジトリ メソッドを実装するために必要なことです。

http://docs.spring.io/spring-data/data-jpa/docs/current/reference/html/#repositories.custom-implementationsも参照してください。

于 2015-10-22T08:24:44.610 に答える