0

再会,

我正在研究 Spring Boot。这是我的项目 - https://github.com/Alex1182-St/java-spring-jpa-postgresql.git

我有 2 个实体:

AppUserEntity - https://github.com/Alex1182-St/java-spring-jpa-postgresql/blob/master/src/main/java/com/java/javaspringjpapostgresql/entities/AppUserEntity.java

和 RoleEntity - https://github.com/Alex1182-St/java-spring-jpa-postgresql/blob/master/src/main/java/com/java/javaspringjpapostgresql/entities/RoleEntity.java

实体具有双向引用(ManyToMany、FetchType.LAZY)。

我的问题是,当我的方法(AppUserController 中的方法 appUserById2WithPost)返回实体而不是 DTO 时,我会在答案中收到“循环”。 这是这个循环的样子 -

    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
    "appUserLogin": "Login9",
    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
    "roles": [
        {
            "id": "7a8abe8d-ab02-4e00-a463-a7d23df05778",
            "name": "USER",
            "appUsers": [
                {
                    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
                    "appUserLogin": "Login9",
                    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
                    "roles": [
                        {
                            "id": "7a8abe8d-ab02-4e00-a463-a7d23df05778",
                            "name": "USER",
                            "appUsers": [
                                {
                                    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
                                    "appUserLogin": "Login9",
                                    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
                                    "roles": [
                                        {
                                            "id": "7a8abe8d-ab02-4e00-a463-a7d23df05778",
                                            "name": "USER",
                                            "appUsers": [
                                                {
                                                    "id": "e68e915f-e684-4b95-820a-a670a7bea677",
                                                    "appUserLogin": "Login9",
                                                    "appUserPassword": "$2a$10$ENyk.YDPLn4zsq1JL6Nol.97kwIlZVAK7pCei8I9i6LhzMj52UAN.",
                                                    "roles": [
                                                        { AND SO ON...

在 Idea 的控制台中,我有这样的错误 -尝试解决异常时失败 [org.springframework.http.converter.HttpMessageNotWritableException]

使用该方法的控制器 - https://github.com/Alex1182-St/java-spring-jpa-postgresql/blob/master/src/main/java/com/java/javaspringjpapostgresql/controllers/AppUserController.java

当然,我可以通过返回 DTO(如在方法 appUserByIdWithPost 中)或在实体中使用注释 @JsonIdentityInfo 来解决它。

但我担心项目中仍然会出现错误。我想解决它。但我找不到它的原因。有人能帮我吗?或者这种行为是否正常?

先感谢您。

4

1 回答 1

0

我会说这种行为对于双向关系是正常的,并且使用 JSON 注释处理它很好(尽管 @JsonIdentityInfo 不是必需的:您可以考虑JsonIgnoreJsonValue)。

另一个问题是您是否需要双向关系(RoleEntity 上的多对多真的有必要吗?)或者即使 RoleEntity 应该是一个实体。

于 2020-08-24T10:40:11.763 回答