今天在自己打小程序项目的时候(后端spring boot)发现有个问题,前端有个上传图片我的功能,前端将文件保存为一个url的数组(imgList[])传送到后端,后端进行处理,但我在后端使用的是mysql数据库,存储的类型不支持数组类型,在传输的过程中报错,原因是我在后端的数据库的imgList设置为了String的类型。
在想如何解决的时候,其实url本质上就是一个字符串,我们可以将url数组转化成url字符串并用,隔开存入数据库中,再用时候再将url字符串转化成数组,在实现的时候可以在后端转换成字符串也可以在前端将数组转化成字符串转过去
在前端利用const imgListString = imgList.join(',');将imgList数组转化为以,隔开的字符串并存到imgListString中再将数据发送到后端。
在这里简单介绍一下这个部分功能,主要是小程序(校园二手交易论坛)的一个主页我写的组件的一个显示功能。完成的样子大概是
我在后端的接收的前端的信息类为
import java.math.BigInteger;
import java.util.List;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.catalina.valves.JsonAccessLogValve;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.time.*;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Issue {
private Integer id;//每个
private Integer type;//校区
private Integer price;//价格
private String classify;//分类
private String nickname;//用户名
private String name;//商品名
private String introduction;//简介
private String imgListString;//图片url字符串
private String avatarUrl;//用户头像
private BigInteger time;//时间戳
private String[] imgList;//图片url数组
}
在接收数据的时候,由于是接受若干条数据,所以我在后端接受的方法设置为了List<Issue>类型,在处理的时候文明也要一个个进行转化(有些麻烦不知道有没有更好的方法)具体实现部分为
public List<Issue> getByType(Integer type) {
List<Issue> issueList = issueMapper.getByType(type);
for (Issue issue : issueList) {
processImgListString(issue);
}
return issueList;
}
private void processImgListString(Issue issue) {
if (issue != null && issue.getImgListString() != null && !issue.getImgListString().isEmpty()) {
// 使用逗号分隔符拆分字符串
issue.setImgList(issue.getImgListString().split(","));
}
}
其中issueMapper是接受数据库传送数据的一个对象,getByType可以获取List<Issue>的对象issue.getImgListString().split(",")
是一个字符串操作,它将 imgListString
字符串使用逗号 ,
作为分隔符拆分为一个字符串数组。这样前端就能接受到数据了
在前端的控制台输入传送信息如图
可以看到传送的imgList数组和imgListString字符串,可以看到是经过转化了,当然了,在实际项目中字符串可以不用传输,当查很多条数据时候还会影响速度