json 忽略Jackson属性

tpxzln5u  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(107)
{admin": false,
    "email": "student@student.com",
    "firstName": "Student",
    "idGroup": {
      "idGroup": 1,
      "name": "BlijkbaarGeenGroep",
      "teacher": {
        "admin": true,
        "email": "1",
        "firstName": "Example",
        "idUser": 1,
        "lastName": "User",
        "teacher": true
      }
    }

字符串
返回以下内容。我想让Jackson做的就是无视老师。我真的不关心这个电话的老师项目。问题是我不想访问GroupEntity,因为有时候我确实需要groupinfo。

package org.hva.folivora.daomodel.user;

    import com.owlike.genson.annotation.JsonIgnore;
    import com.owlike.genson.annotation.JsonProperty;
    import org.codehaus.jackson.annotate.JsonIgnoreProperties;
    import org.codehaus.jackson.annotate.JsonIgnoreType;
    import org.hva.folivora.daomodel.global.GroupEntity;

    import javax.persistence.*;
    import java.io.Serializable;

    /**
     * @author
     */
    @Entity
    @Table(name = "Student", schema = "pad_ijburg", catalog = "")
    public class StudentEntity extends UserEntity implements Serializable {
        private GroupEntity idGroup;

        public StudentEntity(String email, String firstName, String lastName, String password, GroupEntity idGroup) {
            //A student cannot be an admin or teacher. (False, False)
            super(email, firstName, lastName, password, false, false);
            this.idGroup = idGroup;
        }

        public StudentEntity() {

        }

//Something like ignore all but idgroup??!
        @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
        @JoinColumn(name = "idGroup")
        public GroupEntity getIdGroup() {
            return idGroup;
        }

        public void setIdGroup(GroupEntity idGroup) {
            this.idGroup = idGroup;
        }

    }

xxslljrj

xxslljrj1#

您有多种选择:
1.将@JsonIgnoreProperties放在StudentEntity类上。参见:JsonIgnoreProperties (Jackson-annotations 2.7.4 API)
1.为StudentEntity编写自定义JsonSerializer。在这里,您必须写下为输出JSON构造每个字段的代码。参见:Jackson - Custom Serializer | Baeldung
1.使用Mixin,它基本上是一个与StudentEntity匹配的接口。在这里,您可以在getTeacher()方法上使用@JsonIgnore。参见:JacksonMixInAnnotations · FasterXML/jackson-docs Wiki · GitHub
1.在StudentEntity类中的idGroup属性上放置一个@JsonSerialize。注解接受一个实现JsonSerializer的类作为参数。但是,当(且仅当)Jackson序列化StudentEntity的示例时,您可以指定序列化idGroup属性的方法。(这或多或少有点像 option 2.,但实现起来要简单得多)
1.编写一个与输出格式匹配的DTO类。然后将StudentEntity对象中的字段逐个复制到StudentEntityDTO对象(该对象没有teacher属性),然后让Jackson序列化DTO对象而不是原始StudentEntity对象。这需要编写大量的代码,并且只有在输出JSON与原始对象非常不同的情况下才有用。
我会选择前四个选项之一。

q43xntqr

q43xntqr2#

把@JsonIgnore放在老师的getter上,它不会进来放json

相关问题