项目中使用feign能够实现负载均衡的能力,所以当我们在进行服务间的调用的时候使用的是fegin来实现.
使用feign的时候如果我们想使用实体或者map当作参数传递的时候,像上篇文章中那样使用就无法接收到了.
这里我们使用@SpringQueryMap
注解,具体使用方法如下:
@FeignClient(value = "PAY-SERVER" )
public interface TestServiceFeign {
//使用SpringQueryMap注解才能接收到 实体或map容器的参数
@PostMapping(value = "/pay/test", consumes = "application/json")
JSONObject test(@SpringQueryMap Map queryMap);
}
使用此注解后我们即可实现feign传递实体或者Map,但是这样在接收参数的地方使用的是map中存储的key当作变量单个接取.比如我上面map中存储的值是name=小明 age=12,接收方法如下
@RestController
@RequestMapping("pay")
public class TestController {
@RequestMapping("test")
public JSONObject test( String name,String age){
JSONObject jsonObject = new JSONObject();
jsonObject.put("age", age);
jsonObject.put("name", name);
return jsonObject;
}
}
如果想要直接在接收的时候接收map则使用如下方式,使用@RequestBody
注解
@FeignClient(value = "PAY-SERVER")
public interface TestServiceFeign {
@PostMapping(value = "/pay/test", consumes = "application/json")
JSONObject test(@RequestBody Map queryMap);
}
接收方如下,同样使用 @RequestBody
注解
@RestController
@RequestMapping("pay")
public class TestController {
@RequestMapping("test")
public JSONObject test(@RequestBody Map queryMap){
JSONObject jsonObject = new JSONObject();
jsonObject.put("test", "value1");
jsonObject.put("map", queryMap);
return jsonObject;
}
}
上传文件我们需要再方法参数前面添加另一个注解@RequestPart("file")
括号内容为接收的参数名称.同时需要配置方法传输数据格式,需要再@PostMapping中添加设置,如下,consumes参数声明了方法是使用multipart/form-data方式提交数据.
@PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
JSONObject test(@RequestPart("file") MultipartFile file);
接收的地方使用的配置基本相同,如下
@RequestMapping(value = "/file/upload", method = RequestMethod.POST, consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@ResponseBody
public FileEntity fileUpload(@RequestParam(value = "file", required = true) MultipartFile multipartFile) {
这样我们能够实现上传小文件,但是大点的文件我们就无法上传了.
上传大文件需要解决传输文件大小的限制上传大文件的时候,那么我们在服务配置文件中添加如下配置.
spring:
servlet:
multipart:
max-file-size: 2000MB
max-request-size: 2000MB