Springcloud项目简单搭建五(feign传递复杂参数)

项目中使用feign能够实现负载均衡的能力,所以当我们在进行服务间的调用的时候使用的是fegin来实现.
使用feign的时候如果我们想使用实体或者map当作参数传递的时候,像上篇文章中那样使用就无法接收到了.

传递实体或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

你可能感兴趣的:(SpringCloud)