Solo  当前访客:4 登录 注册

喧哗博客-http://blog.xuahua.com

繁华过后的沉寂--技术经验分享
浏览次数: 94,390    文章总数: 91    评论总数: 3
存档:
2018 年 11 月 (2)

springcloud Feign @RequestBody 有更新!

1,API工程接口定义

   

@FeginClient(vlaue="memberprovider",fallback=LoginServiceFeginHystrix.class)
public interface LoginService{

  /***
     * 注册新用户
     * */
    @PostMapping(value = "/login/reg")
    public MemberDTO regMember(@RequestBody MemberVo memberVo) throws BusinessException, ServiceException;

}
    熔断服务

  @Slf4j

@Component
public class LoginServiceFeginHystrix implements LoginService {

   @Override
    public MemberDTO regMember(MemberVo memberVo) throws BusinessException, ServiceException {
        log.error("====<<<<进入熔断服务..{}", "LoginServiceFeginHystrix.regMember()");
        return null;
    }
}

}

  

2, 服务端工程实现

   

 @Override
 public MemberDTO regMember(@RequestBody MemberVo memberVo) throws BusinessException, ServiceException {
 //do somethings
}

 

3,消费端调用

 

 @PostMapping("/login/reg")
    public BaseResult reg(MemberVo memberVo) throws BusinessException, ServiceException {
 MemberDTO memberDTO = loginService.regMember(memberVo);
......
}

 

要注意要点:

  服务端实现一般使用工具生成,没有带 @RequestBody

 另外一个,注意接口定义的包名,与消费端包扫描的路径,确认消费端是否会把接口定义的路径扫描进去。

如,接口路径 com.xuahua.api.common.xx

 而消费端的启动类在 com.xuahua.consumer.xx 这样就会扫不到,需要手动添加@ComponetScan(basePackages="")

 缺少这个导致请求过来的值为空。

 

 

 

springcloud fegin 支持文件上传 有更新!

1,API 工程

   定义上传文件接口

   

@FeignClient(value = "PLACESERVICEPROVIDER", configuration = FileService.MutilSupportConfig.class)
public interface FileService {

    @PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public BaseResult upload(@RequestPart(value = "file") MultipartFile file) throws ServiceException;

@Configuration
class MutilSupportConfig {

        @Autowired
ObjectFactory<HttpMessageConverters> messageConvertos;

@Bean
public Encoder feignFormEncoder() {
            return new SpringFormEncoder(new SpringEncoder(messageConvertos));
}
    }
}




 

2,服务方工程

  具体实现如下

  

@Service
@RestController
public class FileServiceImpl implements FileService {
    @Override
    public BaseResult upload(MultipartFile file) throws ServiceException {
        log.info("====<<<<进入上传处理接口");
        if (file == null) {
            return BaseResultGenerator.failure("上传文件file不能为空");
        }
        return BaseResultGenerator.success(file.getOriginalFilename());
    }
}

  

 

3,消费方工程

  具体实现如下

 

@Slf4j
@RestController
public class FileController {

    @Autowired
    FileService fileService;

    @PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public BaseResult upload(MultipartFile file) throws ServiceException {
        log.debug("=============>进入上传接口{}", file.getName());
        return fileService.upload(file);
    }
}



 

4. 要引入的包

 <dependency>
                <groupId>io.github.openfeign.form</groupId>
                <artifactId>feign-form-spring</artifactId>
                <version>3.2.2</version>
            </dependency>
            <dependency>
                <groupId>io.github.openfeign.form</groupId>
                <artifactId>feign-form</artifactId>
                <version>3.2.2</version>
            </dependency>

 

 注意,对于上传大文件,超过1M时,会提示文件过大。

在配置文件中需要设置

spring.servlet.multipart.enabled=true

spring.servlet.multipart.max-file-size=10MB

spring.servlet.multipart.max-request-size=10MB

 

原来1.5.9配置为

spring.http.multipart.enabled=true

spring.http.multipart.max-file-size=10MB

spring.http.multipart.max-request-size=10MB

 

在使用Fegin上传时,不光要处理zuul的文件大小,文件超时问题,还要注意也要修改服务方的文件大小以及超时。


        

公告

喧哗博客--繁华过后的沉寂--技术经验分享^-^
Copyright (c) 2009-2019, b3log.org & hacpai.com