首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Youfei
V2EX  ›  Java

请问 spring boot 如何在 response 中同时返回一个 object 和 binary data

  •  
  •   Youfei · 131 天前 · 3170 次点击
    这是一个创建于 131 天前的主题,其中的信息可能已经有所发展或是发生改变。
    菜鸟遇到了些困难,最近要要完成一个需求要求在一次响应中返回 object 和 binary data.
    目前想到 binary data 用 base64 存在 json 中,client 端是 python,拿到数据再解析
    不知道还有没有别的更好的方法,谢谢大家
    38 回复  |  直到 2019-09-18 10:41:54 +08:00
    guxingke
        1
    guxingke   131 天前 via Android
    可以说没有 这种情况下 必须客户端配合解析
    oaix
        2
    oaix   131 天前
    multipart
    Youfei
        3
    Youfei   131 天前
    @oaix 你提到的是 multipartbody 吗,这是是个封装后的类好像需要 java 重新反射生成相应的类才能获取各个文件。https://github.com/juazugas/spring-boot-multipart
    arrow8899
        4
    arrow8899   131 天前
    return {"data": object, "binary": []},binary data 序列化后其实就是一个数组;
    Youfei
        5
    Youfei   131 天前
    @guxingke 没有现成的方法,只能简单粗暴一点吗?
    3789
        6
    3789   131 天前 via Android
    @Youfei 你自己用的方法🈶什么问题吗?
    Youfei
        7
    Youfei   131 天前
    @3789 还没写,想着会有更优雅的实现方式或者有现成的工具~
    xfriday
        8
    xfriday   131 天前
    用 protobuf 可以传 byte[]; json/xml 等都是文本序列化
    lc1450
        9
    lc1450   131 天前
    第一行输出 json 字符串,然后换行输出二进制数据
    接收时 readline 第一行 json,后面当二进制处理就 ok 了,

    跟下载文件没什么区别
    xuanbg
        10
    xuanbg   131 天前
    二进制数据为什么不通过另一个接口获取呢?
    Youfei
        11
    Youfei   131 天前
    @xuanbg 就是这么个需求...
    Youfei
        12
    Youfei   131 天前
    @xfriday 如果说,一部分是文本,而另一部分是二进制流式传输呢?
    Youfei
        13
    Youfei   131 天前
    @lc1450 如果说,一部分是 json,而另一部分是二进制流式传输呢?
    LeeSeoung
        14
    LeeSeoung   131 天前
    multipart/form-data 问题是 python 端的接收能自动解析出表单数据么。
    springz
        15
    springz   131 天前
    一个字段放字节流,前端应该很容易转 binary,放 Hex 应该也可以
    springz
        16
    springz   131 天前
    最好还是另一个接口获取
    xfriday
        17
    xfriday   131 天前
    @Youfei
    message A {
    bytes b = 1;
    string c = 2;
    int32 d = 3;
    ...
    }
    hantsy
        18
    hantsy   130 天前
    分开,文本用 Json,Bin 用 Stream
    Youfei
        19
    Youfei   130 天前
    @hantsy 我就是在想如何在 body 中同时传输 json,bin stream,请问有实现方式吗?
    armyHcz
        20
    armyHcz   130 天前
    你这个头像让我眼前一亮,又看到你问的问题,发现根本不是本人.
    Youfei
        21
    Youfei   130 天前
    @armyHcz 谁,leo ?
    toxicant
        22
    toxicant   130 天前
    @armyHcz Summer 吗? 我也是以为是他才进来的
    18258226728
        23
    18258226728   130 天前
    感觉这个像是下载文件,然后有错误的时候不下载提示
    psyche
        24
    psyche   130 天前
    可以把 JSON 也转换成二进制, 和你的 bin 合并成一个流 (比如用特殊符号分隔什么的), 然后 stream.
    Youfei
        25
    Youfei   130 天前
    @psyche 感觉好像只有这种可行了。但是我是看到有别的方法,但是不知道实现,https://developer.amazon.com/zh/docs/alexa-voice-service/structure-http2-request.html#examples
    armyHcz
        26
    armyHcz   130 天前
    @toxicant 是的
    armyHcz
        27
    armyHcz   130 天前
    @Youfei Summer
    cnbattle
        28
    cnbattle   130 天前 via Android
    二进制 base64 当普通文本返回 可否
    cnbattle
        29
    cnbattle   130 天前 via Android
    @cnbattle 请无视我的内容…
    freestyle
        30
    freestyle   130 天前 via iPhone
    奇怪的需求用奇怪的方式,binary 不大的话 base64 后放 response header 里,客户端也能正常取到的.
    hantsy
        31
    hantsy   130 天前
    @Youfei Multiapart 在 Request Body 还是很常见。 几乎所有的 java web framework 都有 Multipart 处理。你这个 Amazon Link 也是 Request Body。

    你想要的 Response Body 里面使用 Multipart 我是没有见过,不知 Http 是否支持,没看相关 Spec。
    hantsy
        32
    hantsy   130 天前
    可以尝试用最原始的 ResponseWriter 直接写 Multipart 进 Response。
    hantsy
        33
    hantsy   130 天前
    可行与否,我不知道,从来没遇到这种需求。https://stackoverflow.com/questions/47067312/multipart-http-response
    Youfei
        34
    Youfei   130 天前
    @hantsy 你仔细看,amazon 确实是有 multipart/related response 哦
    Youfei
        35
    Youfei   130 天前
    @hantsy 多谢,我看一下
    Takamine
        36
    Takamine   130 天前 via Android
    ResponseEntity 看看行不行。
    zzl22100048
        37
    zzl22100048   130 天前
    json 不大的话放 response headers 都行吧,response body 传流
    livnimasileid
        38
    livnimasileid   129 天前
    不是很清楚哦
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2083 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 49ms · UTC 14:06 · PVG 22:06 · LAX 06:06 · JFK 09:06
    ♥ Do have faith in what you're doing.