我正在尝试使用Spring Data Rest为大约60个实体实现一整套服务。现在,我只是让Spring使用我的存储库,而不是实现控制器,这很好!
我必须建模的数据并不理想--我更喜欢将customerId
作为order
对象的一部分。
{
"tenantId": 42,
"id": "00000001",
"customer": {
"tenantId": 42,
"id": "CUST001",
"name": "Arthur Dent"
}
}
我将相关实体的ID作为JSON对象的属性。
public class Order {
Long tenantId;
String id;
String customerId;
}
我并不真的想提取完整的Customer
实体和所有其他相关实体并将它们作为Order对象的成员。相反,我只想添加一些_links
集合的链接。
我相信我终于弄明白了WebMvcLinkBuilder
,我有了基本的想法。但是,JpaRepository.findById
返回java.util.Optional
。
@Bean
public RepresentationModelProcessor<EntityModel<Order>> orderProcessor() {
return new RepresentationModelProcessor<EntityModel<Order>>() {
@Override
public EntityModel<Order> process(final EntityModel<Order> model) {
final CustomerRepository controller = WebMvcLinkBuilder.methodOn(CustomerRepository);
final CustomerId id = new CustomerId(model.getContent().getTenantId(), model.getContent().getCustomerId());
model.add(WebMvcLinkBuilder.linkTo(controller.findById(id)).withRel("customer"));
return model;
}
};
}
我得到的错误是:
无法生成java.util类的CGLIB子类。可选:此问题的常见原因包括使用final类或不可见类;嵌套异常为java. lang. IllegalArgumentException:不能子类化final类java.util.Optional
如何添加链接到我的资源?
1条答案
按热度按时间arknldoa1#
我和你有同样的问题,我通过创建一个函数
findByIdOrThrowError(Integer id)
来解决它,该函数从Controller获取Customer
,并检查是否没有结果来抛出.orElseThrow()
错误。然后调用
linkTo()
内部的函数。