Spring 忽略Jackson OnDemand中的嵌套属性

Spring 忽略Jackson OnDemand中的嵌套属性,spring,spring-boot,jackson,Spring,Spring Boot,Jackson,我正在开发一个spring引导应用程序,其中Hibernate作为ORM,Jackson作为JSON serialiser 我有三个模型对象和所有三个模型的CRUD操作 Class Student{ private Teacher teacher; // Teacher of the student — to be fetched eagerly +Getter/Setter } class Teacher { private List<Subject&g

我正在开发一个spring引导应用程序,其中Hibernate作为ORM,Jackson作为JSON serialiser

我有三个模型对象和所有三个模型的CRUD操作

Class Student{
     private Teacher teacher;  // Teacher of the student — to be fetched eagerly
    +Getter/Setter
}

class Teacher {
      private List<Subject> subject;  // List of subjects associated to that user— to be fetched eagerly
      +Getter/Setter 
}

class Subject {
     private long subjectId 
    //Other subject properties
    + Getter/Setter
}
班级学生{
私人教师;//学生的教师-急切地被邀请
+吸气剂/塞特
}
班主任{
private List subject;//与该用户相关联的主题列表-急切获取
+吸气剂/塞特
}
班级科目{
私人长主体
//其他标的财产
+吸气剂/塞特
}
每当我触发获取学生信息的请求时,我都会获取正确的教师信息,同时我也会收到我不需要的科目信息。在同一时间,当我要求教师信息,我需要科目信息应关联到这一点是肯定的。如果我对主题使用
@JsonBackReference
,我会一直失去它。我不知道如何做到这一点

提前感谢您的帮助

您可以使用

从spring博客:

public class View {
  interface Summary {}
}

public class User {

  @JsonView(View.Summary.class)
  private Long id;

  @JsonView(View.Summary.class)
  private String firstname;

  @JsonView(View.Summary.class)
  private String lastname;

  private String email;
  private String address;
  private String postalCode;
  private String city;
  private String country;
}

public class Message {

  @JsonView(View.Summary.class)
  private Long id;

  @JsonView(View.Summary.class)
  private LocalDate created;

  @JsonView(View.Summary.class)
  private String title;

  @JsonView(View.Summary.class)
  private User author;

  private List<User> recipients;

  private String body;
}
公共类视图{
接口摘要{}
}
公共类用户{
@JsonView(View.Summary.class)
私人长id;
@JsonView(View.Summary.class)
私有字符串名;
@JsonView(View.Summary.class)
私有字符串lastname;
私人字符串电子邮件;
私有字符串地址;
专用字符串后代码;
私人城市;
私人国家;
}
公共类消息{
@JsonView(View.Summary.class)
私人长id;
@JsonView(View.Summary.class)
创建私有LocalDate;
@JsonView(View.Summary.class)
私有字符串标题;
@JsonView(View.Summary.class)
私人用户作者;
私人名单收件人;
私有字符串体;
}
在控制器中

@RestController
public class MessageController {

  @Autowired
  private MessageService messageService;

  @JsonView(View.Summary.class)
  @RequestMapping("/")
  public List<Message> getAllMessages() {
    return messageService.getAll();
  }

  @RequestMapping("/{id}")
  public Message getMessage(@PathVariable Long id) {
    return messageService.get(id);
  }
}
@RestController
公共类消息控制器{
@自动连线
私人信息服务;
@JsonView(View.Summary.class)
@请求映射(“/”)
公共列表getAllMessages(){
returnmessageservice.getAll();
}
@请求映射(“/{id}”)
公共消息getMessage(@PathVariable Long id){
returnmessageservice.get(id);
}
}

PS:没有指向的链接,因为它当前已关闭。

您也可以这样注释

Class Student{
    @JsonIgnoreProperties("subject")
    private Teacher teacher;  // Teacher of the student — to be fetched eagerly
}

您可以编写一个自定义Jackson筛选器,根据序列化的内容有条件地筛选出不需要的字段。很高兴听到我能帮忙。不要忘记将答案标记为已接受,以便其他人知道问题已解决;)这很有帮助。非常感谢。