У меня есть следующий контроллер REST.Добавление дополнительной информации в ответ HATEOAS в Spring Boot Data Rest
@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
, но не уверены в правильном пути.
Edit:
Модель:
@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' и' highlight', вы должны показать нам исходный код для 'Books'. Фактический фрагмент фактического результата и результат, который вы ожидаете/хотите, могут помочь. –
Пожалуйста, введите имена переменных и полей в нижнем регистре. Имена верхнего регистра выглядят как имена классов для разработчиков Java. –
Помогло бы, если бы вы опубликовали свой класс сущностей Books. –