我正在使用spring-data-rest将实体公开为(分页的)rest资源。一切正常,但是当我通过请求数据时RestTemplate,我得到了一个无用的HATEOAS JSON(我没有要求)。JSON似乎是PagedResources
。我可以接受,但是JSON无法正确转换为对象。没有content
里面。
Repository:
@RepositoryRestResource(collectionResourceRel = "people", path = "people")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>
{
List<Person> findByLastName(@Param("name") String name);
}
Client:
public List<Person> getPersons()
{
RestTemplate rt = new RestTemplate();
System.out.println(rt.getForObject(URL, PagedResources.class).getContent().size());
System.out.println(rt.getForObject(URL, PagedResources.class).getLinks().size());
System.out.println(rt.getForObject(URL, PagedResources.class).getMetadata().getTotalElements());
return new ArrayList<Person>(rt.getForObject(URL, PagedResources.class).getContent()); // <-- empty
}
System.out:
0 // getContent().size()
4 // getLinks().size()
2 // getTotalElements()
curl:
C:\...>curl http://localhost:8080/spring-jsf-rest/rest/people
{
"_links" : {
"self" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people{?page,size,sort}",
"templated" : true
},
"search" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people/search"
}
},
"_embedded" : {
"people" : [ {
"firstName" : "John",
"lastName" : "Rambo",
"_links" : {
"self" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people/1"
}
}
}, {
"firstName" : "Chuck",
"lastName" : "Norris",
"_links" : {
"self" : {
"href" : "http://localhost:8080/spring-jsf-rest/rest/people/2"
}
}
} ]
},
"page" : {
"size" : 20,
"totalElements" : 2,
"totalPages" : 1,
"number" : 0
}
}
似乎_embedded
未正确映射到内容?!
正如你已正确发现的那样,PagedResources
它没有_embedded
属性,这就是为什么你没有content
填充该属性的原因。
这个难题可以通过两种不同的方式解决:
首先提供与表示形式匹配的类型。因此,可以制作一个自定义类,并坚持表示的属性名称,或者使用Jackson批注等对它进行自定义。
设置一个自定义MappingJackson2HttpMessageConverter
并自定义,ObjectMapper
以获取Jackson2HalModuleSpring HATEOAS
出厂时已配置的配置。
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.registerModule(new Jackson2HalModule());
MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("application/hal+json"));
converter.setObjectMapper(mapper);
RestTemplate template = new RestTemplate(Collections.<HttpMessageConverter<?>> singletonList(converter));
问题内容: 我无法使用RestTemplate(org.springframework.web.client.RestTemplate)应对额外的弹簧行为,但没有成功。 我在代码下面的Hole应用程序中使用,并且始终会收到XML响应,该响应会解析并评估其结果。 但是无法确定为什么执行后服务器响应为JSON格式: 我已经在较低级别的RestTemplate上进行了调试,内容类型为XML,但是不知道为
我正在尝试使用@ConfigurationProperties注释将对象列表绑定到实体类。Spring Boot框架似乎忽略了这个注释,实际上它什么都不做。 这是我的申请表。yml属性文件: 这是我的实体类: 绑定非常简单: 在应用程序的某个地方,我正在测试该绑定,比如说我在API中创建了endpoint来测试该绑定,即我的控制器调用一个只打印列表中所有对象的方法: 预期: 启动后,Applica
问题内容: 试图弄清楚React的基础知识。 查看此页面上的第二个示例:https : //facebook.github.io/react/ 我看到tick()函数设置Timer类的状态,将前一个值加1。 但是,当我尝试实现自己的简单Counter类时,它失败了,并且出现控制台错误,提示 无法读取未定义的setState属性。 一些谷歌搜索显示我必须将其绑定到增量函数。但是,为什么在我看到的第一
我正在打一个改装电话: 但是,它返回日志为: 但当我这么做的时候 它返回JSON 为什么第一个不返回JSON字符串?
我不熟悉Spring RestTemplate。 但是对于这个项目,我必须使用Spring RestTemplate发送一个POST调用来使用rest API。
关于静态和动态之间的区别,我仍然有点困惑。据我所知,动态使用对象,而静态使用类型,动态在运行时解析,而静态在编译时解析。所以this.lastName.compare(s1.last名称)不应该使用动态绑定吗? 钥匙compareTo(list[position-1])使用动态绑定 (this . last name . compare to(S1 . last name))为什么使用静态绑定?