文档章节

微服务之间调用控制器注解类型的差异

 不再熬夜
发布于 09/21 01:25
字数 456
阅读 26
收藏 1

今天在一个业务服务通过Feign调用文件服务上传文件时遇到了几个问题:

1. 提示http请求头过大的问题;

  • 此时需要修改bootstrap.yml,加入
server:
 max-http-header-size: 10000000

用以放大尺寸

2. 调用方法时提示404,无返回结果;

  • 解决方法:把控制器的注解由@Controller变为@RestController,就可以

被调用方具体代码如下:

@Slf4j
@RestController
@RequestMapping("/image")
public class ImageController {
    private static List<String> allowUploadSuffixes = new ArrayList<>(Arrays.asList("png", "jpg", "jpeg", "zip", "pdf", "xls", "xlsx", "rar", "doc", "docx"));

    @Autowired
    private UploadFileEntityMapper uploadFileEntityMapper;

    @RequestMapping(value = "/uploadBase64", method = RequestMethod.POST)
    @ApiOperation(value = "通过base64方式上传文件")
    @ApiImplicitParams({
            @ApiImplicitParam(paramType = "form", name = "appId", dataType = "String", required = true, value = "应用ID"),
            @ApiImplicitParam(paramType = "form", name = "group", dataType = "String", required = true, value = "对应配置中心配置上传组名(如:public,private等)"),
            @ApiImplicitParam(paramType = "form", name = "fileName", dataType = "String", required = true, value = "文件原名称"),
            @ApiImplicitParam(paramType = "form", name = "file", dataType = "String", required = true, value = "文件内容")
    })
    public ApiResult<UploadResult> uploadBase64(@RequestParam("file") String file, @RequestParam(value = "appId") String appId, @RequestParam("group") String group, @RequestParam("fileName") String originFileName) {
        String imageBase64Str;
        String suffix;
        String mime;
        if (StringUtils.isBlank(file)) {
            return new ApiResult<>(new UploadResult());
        } else if (file.indexOf("data:image/png;") != -1) {
            imageBase64Str = file.replace("data:image/png;base64,", "");
            suffix = "png";
            mime = "image/png";
        } else if (file.indexOf("data:image/jpeg;") != -1) {
            imageBase64Str = file.replace("data:image/jpeg;base64,", "");
            suffix = "jpeg";
            mime = "image/jpeg";
        } else {
            return new ApiResult<>(new UploadResult());
        }
        try {
            if (!allowUploadSuffixes.contains(suffix)) {
                throw new IotBaseException(9999, "不允许上传该文件类型");
            }

            String fileKey = UUID.randomUUID().toString() + "." + suffix;

            FileSystemClient client = FileSystemClient.getClient(group);
            String url = client.upload(fileKey, Base64.getDecoder().decode(imageBase64Str), appId, originFileName);

            UploadFileEntity entity = new UploadFileEntity();
            entity.setAppId(appId);
            entity.setGroupName(group);
            entity.setFileName(originFileName);
            entity.setFileUrl(url);
            entity.setMimeType(mime);
            entity.setProvider(client.getProvider().name());
            entity.setCreatedAt(new Date());
            uploadFileEntityMapper.insert(entity);

            return new ApiResult<>(new UploadResult(url, originFileName));
        } catch (Exception e) {
            e.printStackTrace();
            throw new IotBaseException(ExceptionCode.SYSTEM_ERROR.code, "上传失败");
        }
    }
}

© 著作权归作者所有

粉丝 0
博文 12
码字总数 1792
作品 0
郑州
私信 提问
使用Spring Boot构建微服务(文末福利)

本文主要内容 学习微服务的关键特征 了解微服务是如何适应云架构的 将业务领域分解成一组微服务 使用Spring Boot实现简单的微服务 掌握基于微服务架构构建应用程序的视角 学习什么时候不应该...

异步社区
2018/06/08
0
0
迁移微服务框架-SpringCloud-事后总结

什么是微服务? 什么是 springcloud? 引用维基百科: 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微...

我是你大哥
2018/09/10
541
0
Spring Cloud微服务实战---1.9.微服务架构容错处理

在微服务架中,所有功能均通过微服务来提供,如果其中某个关键微服务出现问题,如响应时间过长,那么所有调用这个微服务的微服务都会变慢,由于调用者微服务变慢,进一步会使其他更广泛的微服...

最老程序员闫涛
2018/12/13
0
0
SpringCloud(第 047 篇)注解式Async配置异步任务

SpringCloud(第 047 篇)注解式Async配置异步任务 - 一、大致介绍 二、实现步骤 2.1 添加 maven 引用包 2.2 添加应用配置文件(springms-asyncsrcmainresourcesapplication.yml) 2.3 添加异...

HMILYYLIMH
2017/10/19
87
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
01/17
79
0

没有更多内容

加载失败,请刷新页面

加载更多

3_数组

3_数组

行者终成事
今天
7
0
经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
今天
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
今天
10
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
今天
7
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部