Ich habe den folgenden REST-Controller.Weitere Informationen zu der HATEOAS-Antwort in Spring Boot Data Rest hinzufügen
@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);
}
Mein Page<Books> BooksResult = BooksService.findBookText(query, pageable);
durch SolrCrudRepository
gesichert. Wenn es ausgeführt wird, hat BookResult
mehrere Felder darin, das Inhaltsfeld und mehrere andere Felder, eins ist highlighted
. Leider ist das einzige, was ich von der REST-Antwort zurückbekomme, die Daten im Feld content
und die Metadateninformationen in der HATEOAS-Antwort (z. B. Seiteninformationen, Links usw.). Was wäre der richtige Weg, das Feld highlighted
zur Antwort hinzuzufügen? Ich gehe davon aus, dass ich die ResponseEntity
ändern müsste, aber unsicher über den richtigen Weg.
bearbeiten:
Modell:
@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
...
}
Wenn eine Suche und die SolrRepository genannt wird (zum Beispiel BooksService.findBookText (Abfrage, seitenwechselbar);) Ich erhalte diese Objekte zurück.
Doch meiner REST Antwort sehe ich nur den "Inhalt". Ich möchte in der Lage sein, das "markierte" Objekt der REST-Antwort hinzuzufügen. Es scheint nur, dass HATEOAS nur die Informationen im "content" -Objekt sendet (siehe unten für das Objekt).
{
"_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
}
}
Nur damit Sie sich ein vollständiges Bild machen können, ist dies das Repository, das den BooksService unterstützt. Der gesamte Dienst ruft diese SolrCrudRepository-Methode auf.
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);
}
Da scheint etwas zu Wenn Sie zwischen "Inhalt" und "Hervorgehoben" unterscheiden, sollten Sie uns den Quellcode für "Bücher" zeigen. Ein tatsächlicher Ausschnitt des tatsächlichen Ergebnisses und das Ergebnis, das Sie erwarten/wollen, könnten helfen. –
Bitte machen Sie Variablen- und Feldnamen in Kleinbuchstaben. Großbuchstaben sehen für Java-Entwickler wie Klassennamen aus. –
Wäre hilfreich, wenn Sie Ihre Buchungskörper-Klasse veröffentlichen. –