Springboot 项目 Controller同时接收MultipartFile数据和json数据

转载参考:https://blog.csdn.net/weixin_44673757/article/details/106914356

同时接收文件类型数据和json数据时写法如下,其中TestRequest前不用加@RequestBody注解。

个人认为:此处content-type的类型为:multipart/form-data ,表示表单中进行文件上传。
由于参数中的MultipartFile类型影响了requestbody本应所对应的content-type: application/json,可能是MultipartFile的媒体类型优先级高,会覆盖application/json。

注意点:

files参数位置写在request前面。

一、普通用法:

@Contoller
public class TestController {
	/**
	* @param file 上传文件
	* @param request 文本对象数据
	**/ 
	@PostMapping("/update")
	public String update(MultipartFile[] files, TestRequest request) {
	     // 方法省略
	}
}

二、加入校验用法:

TestContoller.java :

@Contoller
public class TestController {
	/**
	* @param file 上传文件
	* @param request 文本对象数据
	**/ 
	@PostMapping("/update")
	public String update(MultipartFile[] files, @Valid TestRequest request, Errors errors) {
	     // 这里可以对errors进行处理
	}
}

TestRequest.java:

public class TestRequest {
	
	@NotBlank(message = "id不能为空")
	private String id;
	
	@NotBlank(message = "name不能为空")
	private String name;

	// 忽略getter、setter
}

遇到问题:

  • 正常情况下当传入request数据时,假设传入的id值为空,spring校验时便会生成error信息,放入到Controller的errors对象中,我们只要在Controller中处理这个errors,返回给前端即可。
  • 但是如果files参数位置放在request后面,校验数据时产生的error信息会直接打在控制台上,同时直接给前端返回500的错误,而不是进入Controller方法内部中让我们自己处理。

解决方案:files参数位置写在request前面

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值