Youfei
V2EX  ›  Java

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

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

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

    你想要的 Response Body 里面使用 Multipart 我是没有见过,不知 Http 是否支持,没看相关 Spec。
    hantsy
    hantsy
    Sep 17, 2019
    32
    可以尝试用最原始的 ResponseWriter 直接写 Multipart 进 Response。
    hantsy
    hantsy
    Sep 17, 2019
    33
    可行与否,我不知道,从来没遇到这种需求。https://stackoverflow.com/questions/47067312/multipart-http-response
    Youfei
    Youfei
    OP
    Sep 17, 2019
    34
    @hantsy 你仔细看,amazon 确实是有 multipart/related response 哦
    Youfei
    Youfei
    OP
    Sep 17, 2019
    35
    @hantsy 多谢,我看一下
    Takamine
    Takamine
    Sep 17, 2019 via Android
    36
    ResponseEntity 看看行不行。
    zzl22100048
    zzl22100048
    Sep 17, 2019
    37
    json 不大的话放 response headers 都行吧,response body 传流
    livnimasileid
    livnimasileid
    Sep 18, 2019
    38
    不是很清楚哦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2993 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 123ms · UTC 04:38 · PVG 12:38 · LAX 20:38 · JFK 23:38
    ♥ Do have faith in what you're doing.