java - Spring boot 演示项目的问题

标签 java spring spring-boot

我最近开始学习java的spring boot,在这里找到了一个演示项目:https://www.devglan.com/spring-boot/file-upload-angularjs-spring-boot-rest我试图实现。 “演示”并没有真正深入,所以我只是尝试使用他拥有的代码在 intellij 中重新制作该项目。我目前在 DocumentServiceImpl.java 文件中遇到问题:

package com.formupload.demo.service;

import com.formupload.demo.dao.DocumentDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

public class DocumentServiceImpl implements DocumentService {

    @Autowired
    private DocumentDao documentDao;


    @Override
    public ResponseMetadata save(MultipartFile file) throws IOException {

        Document doc = new Document();
        doc.setDocName(file.getOriginalFilename());
        doc.setFile(file.getBytes());
        documentDao.save(doc);
        ResponseMetadata metadata = new ResponseMetadata();
        metadata.setMessage("success");
        metadata.setStatus(200);
        return metadata;
    }

    @Override
    public byte[] getDocumentFile(Long id) {
        return documentDao.findById(id).getFile();
    }

    @Override
    public List<Document> findAll() {
        return (List<Document>) documentDao.findAll();
    }
}

给我带来麻烦的部分是这一行: return documentDao.findbyId(id).getFile(); intellij 告诉我它找不到方法 getFile()。我不确定我做错了什么,因为我唯一改变的是在我使用 findById() 的同一行上没有使用 findOne() 。

这是 documentDao.java 代码:

package com.formupload.demo.dao;

import com.formupload.demo.service.Document;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface DocumentDao extends CrudRepository<Document, Long> {

}

如果有人可以提供帮助,我们将不胜感激。

这也是 Document.java 代码:

包com.formupload.demo.service;

import javax.persistence.*;

@Entity
public class Document {

    private long id;

    @Column
    private String docName;

    @Column
    @Lob
    private byte[] file;

    public long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getDocName() {
        return docName;
    }

    public void setDocName(String docName) {
        this.docName = docName;
    }

    public void setFile(byte[] file) {
        this.file = file;
    }

    public byte[] getFile() {
        return file;
    }

}

最佳答案

findById 返回 Optional<Document> ,不是Document .

您的代码应该是:

@Override
public byte[] getDocumentFile(Long id) {
    return documentDao.findById(id)
                      .orElseThrow(() -> new IllegalArgumentException("Document not found: " + id))
                      .getFile();
}

关于java - Spring boot 演示项目的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52280522/

相关文章:

java - 使用 keystore api 'unable to find valid certification path to requested target' 的内存 keystore

spring-boot - 扩展 CrudRepository 的 @Autowired 接口(interface)如何工作?我想有一些见解

枚举值的 Java 数组

java - 如何以编程方式将图像插入Word文档?

java - 尝试理解已经制作的 JApplet 代码

java - XSL-FO 无法在 Java 中添加字体

java - 使用 Spring Boot Maven 插件在一个多模块项目中构建所有 Spring Boot 应用程序 docker(OCI) 镜像

java - 将自动重试添加到 Android 下载管理器

spring - 从 Spring Boot 1.3.0M1 切换到 1.3.0M2 时出现 "NoClassDefFoundError: GenericApplicationListener"

java - @Valid 注解应用于 MultipartFile 对象时被忽略