Spring Data Rest API - 实体对象在 Post 请求中作为 null

问题描述 投票:0回答:1

我创建了一个 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"
    }

}
java spring spring-boot spring-data spring-data-rest
1个回答
0
投票

改变..

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 注释的对象中,序列化似乎没有按预期工作。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.