导读:本期聚焦于小伙伴创作的《如何将JSON中的ByteArray转换为Java或Spring中的图像》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何将JSON中的ByteArray转换为Java或Spring中的图像》有用,将其分享出去将是对创作者最好的鼓励。

在Java和Spring开发中,前端有时会将图片读取为字节数组,放进JSON请求体传给后端。后端需要从JSON里取出ByteArray字段,并将其转换为图像文件或内存中的图像对象,以便存储或进一步处理。

如何将JSON中的ByteArray转换为Java或Spring中的图像

一、JSON中的ByteArray常见形态

通常前端会把字节数组转为Base64字符串,或者某些序列化框架直接把byte[]写为JSON数字数组。Spring中使用@RequestBody映射对象时,如果字段声明为byte[],框架可自动把JSON数字数组或Base64字符串绑定到该字段。

示例实体类

public class ImageDTO {
    // JSON中可以是Base64字符串,也可以是数字数组
    private byte[] data;
    private String fileName;

    public byte[] getData() {
        return data;
    }

    public void setData(byte[] data) {
        this.data = data;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}

二、在Spring Controller中接收并转换

在Controller层使用@PostMapping接收JSON,Spring会自动把byte[]填充好。随后我们可以用标准Java API把ByteArray写成图片文件,或者用ImageIO读取为BufferedImage。

保存为本地文件的实现

import org.springframework.web.bind.annotation.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;

@RestController
@RequestMapping("/api/image")
public class ImageController {

    @PostMapping("/upload")
    public String upload(@RequestBody ImageDTO dto) throws IOException {
        // 将ByteArray转为输入流
        ByteArrayInputStream bis = new ByteArrayInputStream(dto.getData());
        // 用ImageIO读取为内存图像
        BufferedImage image = ImageIO.read(bis);
        if (image == null) {
            return "无法解析图像数据";
        }
        // 写出到磁盘,格式可按需调整
        String path = "/tmp/" + dto.getFileName();
        ImageIO.write(image, "png", new File(path));
        return "图片已保存: " + path;
    }
}

三、直接向前端返回图像

如果希望在Spring中把ByteArray直接作为图片响应返回,可设置produces为图像类型,并返回byte[]。

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

@RestController
public class ImageShowController {

    @GetMapping(value = "/show", produces = MediaType.IMAGE_PNG_VALUE)
    public byte[] show() {
        // 假设从某处拿到了JSON里的byte[],这里直接返回
        byte[] bytes = loadFromJson();
        return bytes;
    }

    private byte[] loadFromJson() {
        // 示意方法,实际应从JSON解析获得
        return new byte[0];
    }
}

四、注意事项

  • 如果JSON里是Base64字符串而非数字数组,实体类可用String接收,再用java.util.Base64解码为byte[]。
  • 使用ImageIO.read时,若数据不是合法图像会返回null,需要做好空值判断。
  • 写文件时注意目录权限和文件名注入风险,避免覆盖系统文件。
核心逻辑就是:从JSON拿到byte[],用ByteArrayInputStream包装,交给ImageIO或文件流写出,即可完成ByteArray到图像的转换。

JSONByteArraySpring修改时间:2026-07-30 12:39:21

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。