Spring HATEOAS在响应中更改实体名称

问题描述

我的API网址是:http://127.0.0.1:8080/api/discussions/

它返回以下内容:

{
    "_embedded": {
        "discussionModels": [
            {
                "id": "9f3f3857-84e1-4e2b-a476-759ac82c1e9f","title": "Example title 1","_links": {
                    "discussions": {
                        "href": "http://127.0.0.1:8080/api/discussions/"
                    }
                }
            },{
                "id": "32e16f18-2f44-4e75-81e4-b9c60d980752","title": "Example title 2",{
                "id": "9671a0e5-56de-48fd-9ef0-ac6d883500d2","title": "Example title 3","_links": {
                    "discussions": {
                        "href": "http://127.0.0.1:8080/api/discussions/"
                    }
                }
            }
        ]
    },"_links": {
        "self": {
            "href": "http://127.0.0.1:8080/api/discussions/"
        }
    }

}

我试图通过在域对象上使用@Relation注释将“ discussionModels”名称更改为“ discussions”:

DiscussionModel

import org.springframework.hateoas.RepresentationModel;
import org.springframework.hateoas.server.core.Relation;

import javax.persistence.*;
import java.util.UUID;

@Entity
@Table(name="discussion")
@Relation(collectionRelation = "discussions",itemRelation = "discussion")
public class DiscussionModel extends RepresentationModel<DiscussionModel> {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public UUID id;
    private String title;

    public DiscussionModel() { }

    public DiscussionModel(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public UUID getId() {
        return id;
    }

    public void setId(UUID id) {
        this.id = id;
    }
}

但是没有效果。

我的控制器如下:

    @GetMapping("/")
CollectionModel<EntityModel<DiscussionModel>> all() {
    List<EntityModel<DiscussionModel>> discussions =
            discussionService.all()
                .map(assembler::toModel)
                .collect(Collectors.toList());

    return CollectionModel.of(
            discussions,linkTo(methodOn(DiscussionController.class).all()).withSelfRel()
    );
}

我的汇编代码:

@Component
public class DiscussionModelAssembler
        implements RepresentationModelAssembler<
            DiscussionModel,EntityModel<DiscussionModel>> {

    @Override
    public EntityModel<DiscussionModel> toModel(DiscussionModel discussionModel) {
        return EntityModel.of(
                discussionModel,//                linkTo(methodOn(DiscussionController.class)).withSelfRel(),linkTo(methodOn(DiscussionController.class).all()).withRel("discussions")
        );
    }
}

我期望的行为是@Relation批注有效,但仍向我显示“ discussionModels”。

我有一个测试用例,位于:https://github.com/dlynch158/relationtest

它显示出相同的行为。

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...