资讯动态

java抽奖项目-奖品上传中传递参数类型的错误

发布时间:2026/9/5 2:02:58 来源:尧图企业网站定制
目录问题导入测试后端接口代码使用CreatePrizeParam类来接收param参数前端应该传递 application\json 字符串。postman发起http请求成功后端失败。网页显示创建奖品失败undefined一、不设定param参数后面的Content-Type二、在postman上的Content-Type上强制application/json三、后端使用String 来接收参数再使用Jacakson工具转化为对应类最后总结问题导入测试后端接口代码使用CreatePrizeParam类来接收param参数前端应该传递 application\json 字符串。/** * 创建奖品 * RequestParam用于接收表单数据的 multipart/form-data * * param param * param prizePic * return */ RequestMapping(/prize/create) public CommonResultLong createPrize(Valid RequestPart(param) CreatePrizeParam param, RequestPart(prizePic) MultipartFile prizePic) { log.info(createPrize CreatePrizeParam{}, JacksonUtil.writerValueAsString(param)); return CommonResult.success(prizeService.createPrize(param, prizePic)); }postman发起http请求成功后端失败。网页显示创建奖品失败undefined一、不设定param参数后面的Content-Type使用postman来测试因为浏览器无法设置单个参数的 Content-Type。在 form-data 表单中把param参数使用json字符串格式构造完成prizePic 传递成功。发起请求之后http请求成功但是显示 Content-Type 的类型为 application/octet-stream 类型导致请求失败后端报错信息也是显示 Content-Type 类型错误。12:16:41 [http-nio-8080-exec-1] ERROR c.e.l.c.h.GlobalExceptionAdvice - 服务异常: org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type application/octet-stream is not supported浏览器中项目前端页面显示创建奖品失败undefind 未定义后端服务器错误信息和上面的服务器异常一样。12:16:41 [http-nio-8080-exec-1] ERROR c.e.l.c.h.GlobalExceptionAdvice - 服务异常: org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type application/octet-stream is not supported二、在postman上的Content-Type上强制application/json在 postman 上的 Content-Type 上强制 application/json 传递成功。因为 prizePic 是一个文件所以不能设定它的类型为application/json所以我们就确定了是 param 参数传递的时候 Content-Type 的问题。三、后端使用String 来接收参数再使用Jacakson工具转化为对应类但是浏览器无法这样只给param参数设置 Content-Type 类型为 application/json 所以对前端很不友好。所以我们修改后端接口让接收 json 字符串自动构造成对象的修改为 String 类型来接收一个字符串。这样就可以让 form-data 中不设定param的 Content-Type 类型让它默认为 application/octet-stream 后端接收到 json 字符串之后通过这个字符串来构造成 CreatePrizeParam 对象了。这是后端代码/** * 创建奖品 * RequestParam用于接收表单数据的 multipart/form-data * * param param * param prizePic * return */ RequestMapping(/prize/create) public CommonResultLong createPrize(Valid RequestPart(param) String param, RequestPart(prizePic) MultipartFile prizePic) { log.info(createPrize CreatePrizeParam{}, param); CreatePrizeParam param1 JacksonUtil.readValue(param, CreatePrizeParam.class); return CommonResult.success(prizeService.createPrize(param1, prizePic)); }使用postman 测试成功浏览器页面也成功最后总结我使用的是SpringBoot4.1.0在奖品创建的时候param在postman上把json字符串构造成功后在返回类型Content-type这一栏里面需要加上application\json这个类型但是浏览器不支持这种写法解决方案1.psotman可以使用但是在param传参数的一栏中的Content-Type这个填上application\json表示这一栏返回的是json2.后端修改把CreatePrizeParam param类换成字符串来接收参数接收到字符串后使用jacksong工具转化为CreatePrizeParam传递给Service层来保证正常。package com.example.lotterysystem.controller; import com.example.lotterysystem.common.pojo.CommonResult; import com.example.lotterysystem.common.utils.JacksonUtil; import com.example.lotterysystem.controller.param.CreatePrizeParam; import com.example.lotterysystem.service.PictureService; import com.example.lotterysystem.service.PrizeService; import jakarta.annotation.Resource; import jakarta.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; RestController //Slf4j public class PrizeController { private static final Logger log (Logger) LoggerFactory.getLogger(PrizeController.class); // private static final Logger logger LoggerFactory.getLogger(PrizeController.class); Autowired private PictureService pictureService; Resource(name prizeServiceImpl) private PrizeService prizeService; RequestMapping(/pic/upload) public String uploadPic(MultipartFile file) { return pictureService.savePicture(file); } /** * 创建奖品 * RequestParam用于接收表单数据的 multipart/form-data * * param param * param prizePic * return */ RequestMapping(/prize/create) public CommonResultLong createPrize(Valid RequestPart(param) String param, RequestPart(prizePic) MultipartFile prizePic) { log.info(createPrize CreatePrizeParam{}, param); CreatePrizeParam param1 JacksonUtil.readValue(param, CreatePrizeParam.class); return CommonResult.success(prizeService.createPrize(param1, prizePic)); } }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价