帮助解决问题。 我有2实体类:JPA和JSON序列化问题
1.
@Entity
@Table(name = "topic")
public class Topic {
@Id
@Column(name = "topic_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "system_id")
private int systemId;
@Column(name = "topic_name")
private String name;
@OneToMany(mappedBy = "topic", fetch = FetchType.EAGER, orphanRemoval = true)
private List<Faq> faqList;
// getters and setters
@Override
public String toString() {
return "Topic{" +
"id=" + id +
", systemId=" + systemId +
", name='" + name + '\'' +
", faqList=" + faqList +
'}';
}
}
2.
@Entity
@Table(name = "faq")
public class Faq {
@Id
@Column(name = "faq_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "question")
private String question;
@Column(name = "answer")
private String answer;
@ManyToOne
@JoinColumn(name = "topic_id")
@JsonIgnore
private Topic topic;
//getters and setters
@Override
public String toString() {
return "Faq{" +
"id=" + id +
", question='" + question + '\'' +
", answer='" + answer + '\'' +
", topicId=" + topic.getId() +
'}';
}
}
我在toString方法写入被迫只允许进行控制台topic.id,因为出现“StackOverflow”错误。序列化到JSON(杰克逊转换器)的情况类似,因此我使用了@JsonIgnore注释。一切都很好。但有一个问题:当我的System.out从controller.js {topic: {id: "1"}, question: "test", answer: "test"}
JSON对象发送到服务器
@RequestMapping(method = RequestMethod.POST, value = "/faqs")
@ResponseBody
public Message editFaq(@RequestBody Faq faq) {
System.out.println(faq);
Message message = new Message("ok");
return message;
}
我NullPointerException异常。我认为这是因为@JsonIgnore,当我尝试获取faq.toString(topic.getId())时,我得到了异常。我怎么解决这个问题?
我解决了这个,添加路径变量的帖子:
@RequestMapping(method = RequestMethod.POST, value = "/faqs/{topicId}")
...
Topic topic = new Topic();
topic.setId(topicId);
faq.setTopic(topic);
但这是秒杀。
谢谢。这是一种解决方法。如果我有很多课程,那对于应用程序来说不是一个很大的负担吗? – AlexSmith
不是。如果您关心IDE的响应能力,您还可以使用Maven模块化应用程序,但在运行时肯定不会担心。更多的关注点是,尽管数据库中需要保密,但在数据库中看到一个新的字段奇妙地出现在公共API中。 – jmkgreen
你说得对。你使用转换一个类到另一个简单的工具?你可以建议什么? – AlexSmith