我有存储库" ClientRepository":
public interface ClientRepository extends PagingAndSortingRepository<Client, Long> {
}
当我请求http://localhost:8080/clients/1时,服务器响应
{
"algorithmId" : 1,
"lastNameTxt" : "***",
"firstNameTxt" : "**",
"middleNameTxt" : "**",
"_links" : {
"self" : {
"href" : "http://localhost:8080/clients/1121495168"
},
"client" : {
"href" : "http://localhost:8080/clients/1121495168"
}
}
}
响应有预期的链接。
当我在另一个控制器中调用存储库继承方法findOne时
@RestController
public class SearchRestController {
@Autowired
public SearchRestController(ClientRepository clientRepository) {
this.clientRepository = clientRepository;
}
@RequestMapping(value = "/search", method = RequestMethod.GET)
Client readAgreement(@RequestParam(value = "query") String query,
@RequestParam(value = "category") String category) {
return clientRepository.findOne(Long.parseLong(query));
}
}
它回应
{
"algorithmId" : 1,
"lastNameTxt" : "***",
"firstNameTxt" : "**",
"middleNameTxt" : "**"
}
为什么没有响应包含第二种情况下的链接?如何让Spring将它们添加到响应中?
答案 0 :(得分:4)
为什么没有回复包含第二种情况的链接?
因为Spring返回你告诉它返回的内容:一个客户端。
如何让Spring将它们添加到响应中?
在您的控制器方法中,您必须构建Resource&lt;客户端&gt;并将其归还。
根据您的代码,以下内容可为您提供所需内容:
datafamilies
从此加紧,我还建议你:
那应该给你一些:
@RequestMapping(value = "/search", method = RequestMethod.GET)
Client readAgreement(@RequestParam(value = "query") String query,
@RequestParam(value = "category") String category) {
Client client = clientRepository.findOne(Long.parseLong(query));
BasicLinkBuilder builder = BasicLinkBuilder.linkToCurrentMapping()
.slash("clients")
.slash(client.getId());
return new Resource<>(client,
builder.withSelfRel(),
builder.withRel("client"));
}
答案 1 :(得分:3)
HATEOAS功能仅适用于使用@RepositoryRestResource
注释的Spring数据jpa存储库。这会自动公开其余端点并添加链接。
当您在控制器中使用存储库时,您只需获取对象,杰克逊映射器将其映射到json。
如果要在使用Spring MVC控制器时添加链接,请查看here