具体需求:
我们的项目是基于springboot框架的springcloud微服务搭建的,后端服务技术层面整体上分为business服务和core服务,business服务用于作为应用层,直接连接客户端,通常用于聚合数据,core服务用来客户端具体操作不同需求来控制数据库,文件上传是通过客户端上传接口,通过business服务,由服务端调用feign接口,也是第一次做这种文件中转,遇到各种问题,下面是我自己的解决方案,不喜勿喷,代码小白一枚;
一,core服务层接口@requestmapping 属性加上consumes=MediaType.MULTIPART_FORM_DATA_VALUE如下代码
@PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public Result<TbFile> upload(@RequestPart(value = "file",required = true) MultipartFile file,
@RequestParam(name = "id",required = true) Integer id,
@RequestParam(name = "desc",required = false) String desc,
@RequestParam(name = "fileId",required = false) Integer fileId )
解释:@RequestMapping存在以下两个属性:
1.String[] consumes() default {};
2.String[] produces() default {};
两个属性的解释及参考例子:
① 属性produces:指定返回值类型,并且可以设置返回值类型和返回值的字符编码;
代码例子参考如下:
属性produces="application/json"时,返回json数据
属性produces="MediaType.APPLICATION_JSON_VALUE;charset=utf-8"时,设置返回数据的字符编码为utf-8
@Controller
@RequestMapping(value = "/getperson", method = RequestMethod.GET, produces="application/json")
public Object getPerson(int id) {
//实现自己的逻辑调用
Person p= new person();
return p;
}
特别说明:produces="application/json"和注解@ResponseBody是一样的效果,使用了注解其实可以不使用该属性了
② 属性consumes: 指定处理请求当中的提交内容类型(Content-Type):application/json, text/html等;
代码例子参考如下:
@PostMapping(value = "/upload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public Result<TbFile> upload(@RequestPart(value = "file",required = true) MultipartFile file,
@RequestParam(name = "id",required = true) Integer id,
@RequestParam(name = "desc",required = false) String desc,
@RequestParam(name = "fileId",required = false) Integer fileId ){
}
解释: MediaType.MULTIPART_FORM_DATA_VALUE 代表的值为multipart/form-data它会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;
二,business客户层接口@requestmapping 属性加上consumes=MediaType.MULTIPART_FORM_DATA_VALUE如下代码
@PostMapping(value = "/upload",produces = MediaType.APPLICATION_JSON_UTF8_VALUE,
consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
Result<TbFile> upload(@RequestPart(value = "file",required = true) MultipartFile file,
@RequestParam(name = "id",required = true) Integer id,
@RequestParam(name = "desc",required = false) String desc,
@RequestParam(name = "fileId",required = false) Integer fileId );
具体大概就这么多能力有限,多多指教!!!