You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios传文件到Spring Kotlin接口报bookTitle非空参数为空故障求助

问题根因

  • 请求格式不匹配:你当前直接传递普通JS对象作为请求体,Axios默认会将其序列化为JSON格式,但后端@ModelAttribute注解是接收multipart/form-data格式的表单参数,JSON格式无法被后端解析,导致所有参数都被识别为null,触发Kotlin非空参数的空指针异常。你用Postman调用正常是因为Postman选择form-data格式时,自动构造了符合要求的请求结构。
  • 文件取值错误:handleFileChange方法中你通过e.target.value获取文件,拿到的只是浏览器做了安全处理的虚假本地路径字符串,不是后端需要的实际File对象。
  • 若你的APIService.config中手动指定了Content-Type: application/json,也会强制请求用JSON格式发送,导致参数解析失败。

修复步骤

1. 修正文件取值逻辑

修改handleFileChange方法,正确获取选中的文件对象:

const handleFileChange = (e) => {
    // 取用户选中的第一个文件对象
    setBook(e.target.files[0])
}

2. 替换请求体为FormData格式

修改handleBookAddSubmit方法,用FormData构造符合multipart/form-data要求的请求参数:

const handleBookAddSubmit = (e) => {
    e.preventDefault();

    console.log(book , bookTitle, bookDescription)

    // 构造FormData对象
    const formData = new FormData()
    formData.append('bookTitle', bookTitle)
    formData.append('bookDescription', bookDescription)
    formData.append('bookFile', book)

    // 直接传递FormData,Axios会自动设置带boundary的multipart/form-data请求头
    axios.post('http://localhost:8989/books/add', formData, APIService.config).then(response => {
        console.log(response.data)
    }).catch((err) => {
        console.warn('error during http call adding book', err);
        console.warn('error during http call adding book Response: ', err.response);
    });
}

3. 清理冲突的请求头配置

检查APIService.config中的配置,移除手动写死的Content-Type: application/json配置,避免覆盖Axios自动生成的正确请求头。

内容的提问来源于stack exchange,提问作者Bhavishya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:36:08