我创建了一个 spring-data-rest 控制器(Post 方法),它接受名为 IssueRequiredDetails 的自定义请求对象。该对象有另一个名为 IssueDocument 的对象作为属性。 问题是这个 IssueDocument 对象是一个数据库实体,因此它具有类中的所有数据库注释(@Entity、@Table、@Column 等...)。当我通过邮递员调用此端点时,所有其他字段都正确获取指定值,但 IssueDocument 为空。奇怪的是,当我从 IssueDocument 类中删除所有数据库注释并点击同一端点时,IssueDocument 将作为邮递员调用的一部分正确进入。不确定为什么会发生以及我需要什么来解决该问题。我已在下面提供了课程和邮递员请求。请稍微解释一下。
控制器类
@PostMapping(path="issue-doc-controller")
public ResponseEntity saveDoc(@RequestBody IssueRequiredDetails issueRequiredDetails){
return ResponseEntity.ok().build();
}
IssueRequiredDetail 类
public class IssueRequiredDetails implements Serializable {
public IssueRequiredDetails(){
}
private String contentType;
private String filename;
private byte[] content;
private Long key;
private String reader;
private IssueDocument issueDocument;
public String getContentType() {
return contentType;
}
public void setContentType(String contentType) {
this.contentType = contentType;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public byte[] getContent() {
return content;
}
public void setContent(byte[] content) {
this.content = content;
}
public Long getKey() {
return key;
}
public void setKey(Long key) {
this.key = key;
}
public String getReader() {
return reader;
}
public void setReader(String reader) {
this.reader = reader;
}
public IssueDocument getIssueDocument() {
return issueDocument;
}
public void setIssueDocument(IssueDocument issueDocument) {
this.issueDocument = issueDocument;
}
}
IssueDocument类
@Entity
@Component
@Table(name = "Document")
public class IssueDocument implements Serializable {
private static final long serialVersionUID = 1L;
public IssueDocument() {
}
@Id
@SequenceGenerator(name="SEQUENCE_FOR_ISSUE_DOCUMENT", sequenceName="SEQUENCE_FOR_ISSUE_DOCUMENT", allocationSize = 1)
@GeneratedValue(strategy=GenerationType.AUTO, generator="SEQUENCE_FOR_ISSUE_DOCUMENT" )
@Column(name="documentid")
private Integer documentId;
@OneToOne
@JoinColumn(name = "issueId")
private Issuev1 issue;
@OneToOne
@JoinColumn(name="username")
private UserBaseV1 user;
@Column(name = "documentname")
private String documentName;
@Column(name="updated_date")
private LocalDateTime updatedDate;
@Column(name="created_date")
private LocalDateTime createdDate;
private Boolean flagged;
public LocalDateTime getCreatedDate() {
return createdDate;
}
public void setCreatedDate(LocalDateTime createdDate) {
this.createdDate = createdDate;
}
public Boolean getFlagged() {
return flagged;
}
public void setFlagged(Boolean flagged) {
this.flagged = flagged;
}
public LocalDateTime getUpdatedDate() {
return updatedDate;
}
public void setUpdatedDate(LocalDateTime updatedDate) {
this.updatedDate = updatedDate;
}
public Integer getDocumentId() {
return documentId;
}
public void setDocumentId(Integer documentId) {
this.documentId = documentId;
}
public String getDocumentName() {
return documentName;
}
public void setDocumentName(String documentname) {
this.documentName = documentname;
}
public Issuev1 getIssue() {
return issue;
}
public void setIssue(Issuev1 issue) {
this.issue = issue;
}
public UserBaseV1 getUser() {
return user;
}
public void setUser(UserBaseV1 user) {
this.user = user;
}
}
邮递员请求
{
"filename":"testing",
"key":14,
"issueDocument":{
"documentName":"testing"
}
}
改变..
public class IssueDocumentDTO {
private String documentName;
// neccesary another field
// getter, non-args-constructor
}
public class IssueRequiredDetails implements Serializable {
private IssueDocumentDTO issueDocument;
// another field...
}
在我看来,使用Dto的原因是一定不能将实体对象放入dto类中。
我认为,在带有 JPA 注释的对象中,序列化似乎没有按预期工作。