次のRESTコントローラがあります。Spring Boot Data RestのHATEOASレスポンスへの追加情報
@RepositoryRestController
@RequestMapping(value = "/booksCustom")
public class BooksController extends ResourceSupport {
@Autowired
public BooksService booksService;
@Autowired
private PagedResourcesAssembler<Books> booksAssembler;
@RequestMapping("/search")
public HttpEntity<PagedResources<Resource<Books>>> search(@RequestParam(value = "q", required = false) String query, @PageableDefault(page = 0, size = 20) Pageable pageable) {
pageable = new PageRequest(0, 20);
Page<Books> booksResult = BooksService.findBookText(query, pageable);
return new ResponseEntity<PagedResources<Resource<Books>>>(BooksAssembler.toResource(BooksResult), HttpStatus.OK);
}
マイPage<Books> BooksResult = BooksService.findBookText(query, pageable);
SolrCrudRepository
によって支えられています。それが実行されると、BookResult
には複数のフィールドがあり、内容フィールドと他のいくつかのフィールド(highlighted
)があります。残念ながら、私がREST応答から返すのは、content
フィールドのデータと、HATEOAS応答のメタデータ情報(ページ情報、リンクなど)のみです。応答にhighlighted
フィールドを追加する適切な方法は何でしょうか?私はResponseEntity
を修正する必要があると思っていますが、適切な方法は不明です。
編集:
モデル:
@SolrDocument(solrCoreName = "Books_Core")
public class Books {
@Field
private String id;
@Field
private String filename;
@Field("full_text")
private String fullText;
//Getters and setters omitted
...
}
検索とSolrRepositoryが呼び出される(例えばBooksService.findBookText(クエリ、ページング可能);)私は戻って、これらのオブジェクトを取得します。
しかし、私のREST応答で私は、 "コンテンツ" を参照してください。 "強調表示された"オブジェクトをREST応答に追加できるようにしたいと思います。 HATEOASは "content"オブジェクト(オブジェクトについては以下を参照)に情報を送信するだけであるようです。
{
"_embedded" : {
"solrBooks" : [ {
"filename" : "ABookName",
"fullText" : "ABook Text"
} ]
},
"_links" : {
"first" : {
"href" : "http://localhost:8080/booksCustom/search?q=ABook&page=0&size=20"
},
"self" : {
"href" : "http://localhost:8080/booksCustom/search?q=ABook"
},
"next" : {
"href" : "http://localhost:8080/booksCustom/search?q=ABook&page=0&size=20"
},
"last" : {
"href" : "http://localhost:8080/booksCustom/search?q=ABook&page=0&size=20"
}
},
"page" : {
"size" : 1,
"totalElements" : 1,
"totalPages" : 1,
"number" : 0
}
}
完全な画像を得ることができるので、これはBooksServiceをサポートしているリポジトリです。すべてのサービスは、このSolrCrudRepositoryメソッドを呼び出します。
public interface SolrBooksRepository extends SolrCrudRepository<Books, String> {
@Highlight(prefix = "<highlight>", postfix = "</highlight>", fragsize = 20, snipplets = 3)
HighlightPage<SolrTestDocuments> findBookText(@Param("fullText") String fullText, Pageable pageable);
}
何かがいるようだので、 'content'と' highlighted'の間で異なっていれば、 'Books'のソースコードを表示する必要があります。実際の結果の実際のスニペットと、あなたが期待する/望む結果が役立つかもしれません。 –
変数名とフィールド名を小文字にしてください。大文字の大文字は、Java開発者のクラス名のように見えます。 –
Booksエンティティクラスを投稿すると役に立ちます。 –