gpt4 book ai didi

java - 如何在 spring mvc 中为图像定义 getter 和 setter

转载 作者:行者123 更新时间:2023-12-01 16:28:30 25 4
gpt4 key购买 nike

我正在尝试使用 spring mvc 将图像上传到 mysql 数据库。我能够插入字符串和整数值,但在上传图像时抛出字段错误

代码:

dao.java 文件:

import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.skillsoft.model.Book;

public class BookDao {
JdbcTemplate template;

public void setTemplate(JdbcTemplate template) {
this.template = template;
}

public List<Book> getExhibitionDetails() {
return template.query("select * from ExhibitionDetails", new RowMapper<Book>() {
public Book mapRow(ResultSet rs, int row) throws SQLException {
Book book = new Book();
book.setStudentId(rs.getInt(1));
book.setName(rs.getString(2));
book.setProjectName(rs.getString(3));
book.setPhoto(rs.getBytes(4));
return book;
}
});
}

public int save(Book p) {
String sql = "insert into ExhibitionDetails(StudentId, Name, ProjectName, Photo) values(" + p.getStudentId() + ",'"
+ p.getName() + "','" + p.getProjectName() + "','" + p.getPhoto() + "')" ;
return template.update(sql);
}

使用p.getPhoto()获取图像并将其插入数据库是否正确?如果不是,有什么替代方案

模型类:


package com.skillsoft.model;

import java.util.List;

import org.springframework.web.multipart.MultipartFile;

public class Book {

private int studentId;
private String name;
private String projectName;
private byte[] photo;

public byte[] getPhoto() {
return photo;
}

public void setPhoto(byte[] photo) {
this.photo = photo;
}

public String getProjectName() {
return projectName;
}

public void setProjectName(String projectName) {
this.projectName = projectName;
}

public int getStudentId() {
return studentId;
}

public void setStudentId(int studentId) {
this.studentId = studentId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

}

Controller :

导入com.skillsoft.dao.BookDao;导入 com.skillsoft.model.Book;

@ Controller 公共(public)类 BookController {

@Autowired
BookDao bookdao;


@RequestMapping("/viewbook")
public String viewbook(Model m) {
List<Book> list = bookdao.getExhibitionDetails();
m.addAttribute("list", list);
return "viewbook";
}


@RequestMapping("/addform")
public String showform(Model m) {
m.addAttribute("command", new Book());
return "addform";
}


@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@ModelAttribute("book") Book book) {
bookdao.save(book);
return "redirect:/viewbook";
}
Error:

Field error in object 'book' on field 'photo': rejected value [org.springframework.web.multipart.commons.CommonsMultipartFile@2e5c8975]; codes [typeMismatch.book.photo,typeMismatch.photo,typeMismatch.[B,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [book.photo,photo]; arguments []; default message [photo]]; default message [Failed to convert property value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'byte[]' for property 'photo'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile' to required type 'byte' for property 'photo[0]': PropertyEditor [org.springframework.beans.propertyeditors.CustomNumberEditor] returned inappropriate value of type 'org.springframework.web.multipart.commons.CommonsMultipartFile']]

最佳答案

谢谢。从错误消息来看,您似乎正在将 org.springframework.web.multipart.commons.CommonsMultipartFile 类型的变量传递给 setPhoto(),该变量需要 字节[]CommonsMultipartFile 有一个 getBytes() 方法,因此您可以尝试调用该方法来获取模型所需的字节数组。

关于我之前的评论:我的直觉是,将图像存储在关系数据库列中可能不是正确的设计选择。如果您计划在网页中显示这些图像,那么几乎可以肯定这不是正确的设计选择。您可以考虑将上传的文件存储在文件系统(或 S3 等云服务)上,然后仅将文件的路径或 URL 存储在模型中。

关于java - 如何在 spring mvc 中为图像定义 getter 和 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62108530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com