다음 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
을 수정할 필요가 있다고 가정하고 있지만 적절한 방법은 확신 할 수 없습니다.
편집 :
모델 :
검색과 SolrRepository가 호출@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
...
}
(예를 들어, 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);
}
뭔가가 보이기 때문에 cotroller에서
나는 새로 구현 하나 PagedResourcesAssembler을 변경하고도 요청 방식에 새로운 HighlightPagedResources을 사용했다 'content'와'highlighted '사이에 다르면'Books' 소스 코드를 보여줘야합니다. 실제 결과 및 예상/결과의 실제 스 니펫이 도움이 될 수 있습니다. –
변수 및 필드 이름을 소문자로 지정하십시오. 대문자는 Java 개발자에게 클래스 이름처럼 보입니다. –
Books 엔터티 클래스를 게시하는 경우 도움이 될 것입니다. –