gpt4 book ai didi

Spring 数据休息 - _links

转载 作者:行者123 更新时间:2023-12-02 02:35:33 28 4
gpt4 key购买 nike

编辑2014年8月14日13:29

我的下一个结论是,从我的 @RepositoryRestResource CrudRepository 生成的 hal+json 格式不正确。

教程 ( http://spring.io/guides/gs/accessing-data-rest/ ) 将超媒体 Rest JPA 实体的输出显示为:(请注意,没有“rel”元素,并且“links”不是数组)

{
"_links" : {
"people" : {
"href" : "http://localhost:8080/people{?page,size,sort}"
}
}
}

但是,引用文档 ( http://docs.spring.io/spring-data/rest/docs/1.1.x/reference/html/intro-chapter.html ) 显示输出应该是:

{
"links" : [ {
"rel" : "customer",
"href" : "http://localhost:8080/customer"
}, {
"rel" : "profile",
"href" : "http://localhost:8080/profile"
}
}

有谁知道这是为什么吗?

========================================

编辑 2014 年 8 月 14 日:我进一步进行了调试。通过提供我自己的 org.springframework.hateoas.ResourceSupport 类的实现,该类检查 json 中的“_links”而不是“links”,我更进一步。错误是:

"Can not deserialize instance of java.util.ArrayList out of START_OBJECT token ..... through reference chain: com.ebs.solas.admin.test.SolicitorDTO[\"_links\"]"

这是因为 org.springframework.hateoas.ResourceSupport 类似乎要求 links 属性是 json 数组。默认情况下,Spring Data 为 Rest 实体生成的 json+hal 输出不会生成数组(没有方括号):

"_links" : {
"self" : {
"href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/Fxxx"
},
"solicitors" : {
"href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/Fxxx/solicitor
}
}

希望来自 Spring 论坛的人可以在这里帮助我。

==================================================

请查看我的 Spring 数据存储库代码的概要:

@RepositoryRestResource
public interface SolicitorFirmRepository extends CrudRepository<SolicitorFirm, String> {
}

@Entity
@RestResource
@Table(name="XXXX", schema = "XXX")
public class SolicitorFirm implements Serializable {
}

这成功生成了以下 hatoas 资源:

{
"firmNumber" : "FXXXX",
"solicitorType" : "r",
"companyName" : "XXXX",
"address1" : "XXXX",
"address2" : "XXX",
"address3" : "XXX",
"address4" : null,
"phoneNumber" : "XXXXX",
"faxNumber" : "XXXXX",
"county" : "OY",
"_links" : {
"self" : {
"href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/XXXX"
},
"solicitors" : {
"href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/XXXX/solicitors"
}
}

但是,当我定义 DTO 供客户端/ Controller 使用时:

import org.springframework.hateoas.ResourceSupport;
public class SolicitorFirmDTO extends ResourceSupport {
.....
}

并使用以下代码

RestTemplate rt = new RestTemplate();
String uri = new String("//xxxxx:9090/solas-admin-data-api/solicitors/Sxxxxx");
SolicitorFirmDTO u = rt.getForObject(uri, SolicitorFirmDTO.class, "SXXXX");

我收到以下错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "_links" (class com.ebs.solas.admin.test.SolicitorFirmDTO), not marked as ignorable (7 known properties: xx])

由于某种原因,Spring Data Rest 生成的 json 在 _links 下添加了实体链接,而 HATEOAS 资源父类(super class)需要 links

有人可以帮忙吗?这是版本问题还是我需要一些额外的配置才能将 _links 映射到 links

我尝试了 MappingJackson2HttpMessageConverter 和各种媒体类型 application/json+hal 但没有成功。

最佳答案

此外,还可以在每个实体上使用mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)使用@JsonIgnoreProperties(ignoreUnknown = true):

@Entity
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
...

}

关于Spring 数据休息 - _links,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25284282/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com