最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot接口中如何直接返回圖片數(shù)據(jù)

 更新時(shí)間:2022年03月18日 10:01:29   作者:黃楊路打字員  
這篇文章主要介紹了SpringBoot接口中如何直接返回圖片數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

接口直接返回圖片數(shù)據(jù)

起因

最近在做涉及到分享推廣的業(yè)務(wù),需要由業(yè)務(wù)員分享二維碼進(jìn)入推廣頁面,由于是新項(xiàng)目,前期預(yù)算和用量都有限,沒有搭建對(duì)象存儲(chǔ)服務(wù),所以決定使用后臺(tái)服務(wù)動(dòng)態(tài)生成二維碼圖片直接圖片數(shù)據(jù)并返回。

首先是二維碼的生成,決定使用google的zxing,畢竟google的東西還是不錯(cuò)的,maven添加依賴如下:

<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.3.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.zxing/javase -->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.3.3</version>
        </dependency>

繼續(xù)查zxing的使用方法,發(fā)現(xiàn)大多數(shù)都是生成二維碼然后寫成圖片文件的,不太適合我現(xiàn)在的情況。

類似這種

Map hints = new HashMap();
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
hints.put(EncodeHintType.MARGIN, 2);
BitMatrix qrcode = new QRCodeWriter().encode(href, BarcodeFormat.QR_CODE, 300, 300);
//網(wǎng)上的方案大多數(shù)都是通過io流寫到文件系統(tǒng),
MatrixToImageWriter.writeToStream(qrcode,"png",response.getOutputStream());

于是企圖用response的輸出流返回,但是返回的數(shù)據(jù)瀏覽器看到的全是亂碼,這種方案并沒有成功

根據(jù)個(gè)人經(jīng)驗(yàn)

一般這種開源方案既然二維碼數(shù)據(jù)BitMatrix對(duì)象都生成了,肯定有獲取原始數(shù)據(jù)的方法,點(diǎn)進(jìn)MatrixToImageWriter類搜索方法,果然,找到了能直接返回BufferedImage對(duì)象的方法

現(xiàn)在,BufferedImage對(duì)象已經(jīng)有了,只差把它扔回前端了,繼續(xù)百度,發(fā)現(xiàn)可以直接返回該對(duì)象,類似以下配置

@GetMapping(value = "/qrcode", produces = MediaType.IMAGE_JPEG_VALUE)
@ResponseBody
public BufferedImage generateQRCode() {
        //返回BufferedImage的對(duì)象
    }

以為問題即將解決,然而瀏覽器訪問返回406,上網(wǎng)一查,原來是沒有對(duì)應(yīng)消息類型的轉(zhuǎn)換器導(dǎo)致的,有博主提到需要如下配置

@Bean
    public BufferedImageHttpMessageConverter addConverter(){
        return new BufferedImageHttpMessageConverter();
    }

加了上面的配置后發(fā)現(xiàn)問題仍沒有解決,報(bào)錯(cuò)仍是406,懷疑配置沒有生效,于是決定走源碼查看原因。debug源碼時(shí)發(fā)現(xiàn)messageConverters的list中確實(shí)沒有我配置的,說明的確是配置問題,查找messageConverters的set操作,查到如圖的地方

發(fā)現(xiàn)springMVC是在配置RequestMappingHandlerAdapter設(shè)置的HttpMessageConverter,進(jìn)入getMessageConverters()方法

根據(jù)我的工地英語8級(jí),extendMessageConverters這個(gè)方法應(yīng)該是在添加自定義的HttpMessageConverter,進(jìn)入該方法

空實(shí)現(xiàn),很明顯估計(jì)是模板模式,需要自己去擴(kuò)展,于是自己寫了一個(gè)配置類繼承WebMvcConfigurationSupport,重寫extendMessageConverters方法

    @Override
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(new BufferedImageHttpMessageConverter());
    }

瀏覽器再訪問,二維碼圖片展示,問題解決

總結(jié):實(shí)現(xiàn)一個(gè)方案的過程中碰到了各種各樣的奇怪問題,最好的方式是先網(wǎng)上找資料快速解決問題,如果無法解決,再通過自己走源碼的方式從根本原因上尋找出現(xiàn)問題的原因,解決問題最復(fù)雜的地方是定位問題,問題定位了,解決便不再是難題

優(yōu)雅的實(shí)現(xiàn)圖片返回

注意:response.setContentType("image/png");這行代碼一定要加上

@RestController
@Slf4j
@Api(tags = SwaggerConfig.TAG_IMAGE)
@RequestMapping(SwaggerConfig.TAG_IMAGE)
public class ImageController {
? ? @Resource
? ? private HttpServletResponse response;
? ? @GetMapping(value = "/getImage")
? ? @ApiOperation("獲取圖片-以ImageIO流形式寫回")
? ? public void getImage() throws IOException {
? ? ? ? OutputStream os = null;
? ? ? ? try {
// ? ? ? ?讀取圖片
? ? ? ? ? ? BufferedImage image = ImageIO.read(new FileInputStream(new File("F:\\谷歌下載\\未命名文件.png")));
? ? ? ? ? ? response.setContentType("image/png");
? ? ? ? ? ? os = response.getOutputStream();
? ? ? ? ? ? if (image != null) {
? ? ? ? ? ? ? ? ImageIO.write(image, "png", os);
? ? ? ? ? ? }
? ? ? ? } catch (IOException e) {
? ? ? ? ? ? log.error("獲取圖片異常{}",e.getMessage());
? ? ? ? } finally {
? ? ? ? ? ? if (os != null) {
? ? ? ? ? ? ? ? os.flush();
? ? ? ? ? ? ? ? os.close();
? ? ? ? ? ? }
? ? ? ? }
? ? }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺談Java消息隊(duì)列總結(jié)篇(ActiveMQ、RabbitMQ、ZeroMQ、Kafka)

    淺談Java消息隊(duì)列總結(jié)篇(ActiveMQ、RabbitMQ、ZeroMQ、Kafka)

    這篇文章主要介紹了淺談Java消息隊(duì)列總結(jié)篇(ActiveMQ、RabbitMQ、ZeroMQ、Kafka),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-05-05
  • SpringBoot?快速實(shí)現(xiàn)分庫分表的2種方式

    SpringBoot?快速實(shí)現(xiàn)分庫分表的2種方式

    本文將為您介紹?ShardingSphere?的一些基礎(chǔ)特性和架構(gòu)組成,以及在?Springboot?環(huán)境下通過JAVA編碼和Yml配置兩種方式快速實(shí)現(xiàn)分庫分表功能,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • SpringMVC之RequestContextHolder詳細(xì)解析

    SpringMVC之RequestContextHolder詳細(xì)解析

    這篇文章主要介紹了SpringMVC之RequestContextHolder詳細(xì)解析,正常來說在service層是沒有request的,然而直接從controlller傳過來的話解決方法太粗暴,后來發(fā)現(xiàn)了SpringMVC提供的RequestContextHolder,需要的朋友可以參考下
    2023-11-11
  • SpringMVC post請(qǐng)求的處理

    SpringMVC post請(qǐng)求的處理

    今天小編就為大家分享一篇解決SpringMVC接收不到ajaxPOST參數(shù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-07-07
  • SpringMVC使用自定義驗(yàn)證器進(jìn)行數(shù)據(jù)驗(yàn)證的方法

    SpringMVC使用自定義驗(yàn)證器進(jìn)行數(shù)據(jù)驗(yàn)證的方法

    SpringMVC?提供了強(qiáng)大的數(shù)據(jù)驗(yàn)證機(jī)制,可以方便地驗(yàn)證表單提交的數(shù)據(jù),除了自帶的驗(yàn)證器之外,SpringMVC?還支持自定義驗(yàn)證器,允許開發(fā)者根據(jù)業(yè)務(wù)需求自定義驗(yàn)證規(guī)則,本文將介紹如何在?SpringMVC?中使用自定義驗(yàn)證器
    2023-07-07
  • java實(shí)現(xiàn)刪除某條信息并刷新當(dāng)前頁操作

    java實(shí)現(xiàn)刪除某條信息并刷新當(dāng)前頁操作

    這篇文章主要介紹了java實(shí)現(xiàn)刪除某條信息并刷新當(dāng)前頁操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 一文詳解Java如何使用commons-csv搞定CSV文件操作

    一文詳解Java如何使用commons-csv搞定CSV文件操作

    在?Java?開發(fā)中,處理?CSV(逗號(hào)分隔值)文件是一項(xiàng)常見的任務(wù),本文將利用Apache?Commons?CSV?庫實(shí)現(xiàn)讀取,寫入和操作CSV文件,希望對(duì)大家有所幫助
    2025-02-02
  • SpringBoot獲取application.properties文件中文亂碼問題及解決

    SpringBoot獲取application.properties文件中文亂碼問題及解決

    這篇文章主要介紹了SpringBoot獲取application.properties文件中文亂碼問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java設(shè)計(jì)模式之外觀模式(Facade)

    java設(shè)計(jì)模式之外觀模式(Facade)

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之外觀模式Facade的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • IDEA打包普通web項(xiàng)目操作

    IDEA打包普通web項(xiàng)目操作

    這篇文章主要介紹了IDEA打包普通web項(xiàng)目操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評(píng)論

榆社县| 丹寨县| 临澧县| 桐城市| 普定县| 武川县| 自贡市| 卢龙县| 都匀市| 轮台县| 平乡县| 武胜县| 弥渡县| 静宁县| 徐闻县| 杭州市| 丽水市| 龙江县| 靖宇县| 铁岭县| 团风县| 芒康县| 长阳| 娱乐| 阿克陶县| 阿合奇县| 郸城县| 铁力市| 茌平县| 石台县| 武川县| 山西省| 白河县| 通山县| 陵川县| 阳信县| 临江市| 灵武市| 荔浦县| 弥勒县| 吉水县|