lixyz
V2EX  ›  Android

Android OKHttp 获取服务器的 Json 数据,没有双引号,请求是怎么回事儿?

  •  
  •   lixyz · Jan 26, 2021 · 13312 views
    This topic created in 1948 days ago, the information mentioned may be changed or developed.

    我服务器使用 SpringBoot 写的,如下:

        @GetMapping(value = "/GetImageByUser",produces = "application/json;charset=UTF-8")
        @ApiOperation("获取用户图片,每个分类前 100 张")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "userId", value = "userId", dataType = "String", paramType = "query")
        }
        )
        public Result getImageByUser(String userId) {
            return imageService.getImageByUser(userId);
        }
    

    返回值 Result 对象如下:

    public class Result {
        private int code;
        private boolean message;
        private Object detail;
        ...省略 setter 和 getter 方法
    }
    

    然后在浏览器访问这个接口的时候,响应结果是带双引号的:

    {"code":200,"message":true,"detail":[{"category":{"objectId":"0c0a0ddaa1b84ce286be4343cd9d3438","categoryId":"c5341c1d8ac547589899514516d0768a","categoryName":"WeiXin","categoryUser":"84f6e0d8d94348ccab981e364661a419","isPrivate":-1,"categoryStatus":1,"createTime":3},"images":[{"objectId":"f6d97d24556348a4ac342cb321397718","imageId":"e50ba0a75359432f89390d85daefb10a","sha1":"c3063275501e0f8ef87703473c7263168771f21b","fileCategory":"c5341c1d8ac5475898
    省略...
    

    然后使用 Swagger 做调试的时候也是同样的效果。

    但是在 Android 端使用 OKHttp 访问接口的时候,json 的 key 和 value 都不带双引号:

    [{category={objectId=0c0a0ddaa1b84ce286be4343cd9d3438, categoryId=c5341c1d8ac547589899514516d0768a, categoryName=WeiXin, categoryUser=84f6e0d8d94348ccab981e364661a419, isPrivate=-1.0, categoryStatus=1.0, createTime=3.0}, images=[{objectId=f6d97d24556348a4ac342cb321397718, imageId=e50ba0a75359432f89390d85daefb10a, sha1=c3063275501e0f8ef87703473c7263168771f21b, 
    省略...
    

    因为 json 中有时候会含有网址,所以在解析 JSON 的时候就会出错。

    我感觉问题应该是出在 OKHttp 上,因为在浏览器是正常的(带双引号),使用 swagger 调试接口的时候也是正常的

    请问这个问题该如何解决啊?如何让 key 和 value 中的字符串都是带双引号的呢?

    grantonzhuang
        1
    grantonzhuang  
       Jan 26, 2021
    你这打印的不是 json,是 toString 方法打印出来的
    w292614191
        2
    w292614191  
       Jan 26, 2021
    OKHttp 可不会出这种低级错误。
    qwerthhusn
        3
    qwerthhusn  
       Jan 26, 2021
    目测 lz 新人,这个 JSON 已经反序列化成对象了,打印的是 toString 又不是 json
    zm8m93Q1e5otOC69
        4
    zm8m93Q1e5otOC69  
       Jan 26, 2021
    访问接口这个打出来的已经是反序列化的对象了,自然没有引号
    Helsing
        5
    Helsing  
       Jan 26, 2021 via iPhone
    找一个可以打印 json 的库,xlog 、logger 之类的
    hongch
        6
    hongch  
       Jan 26, 2021
    response.body.string 就是带双引号的
    kingfalse
        7
    kingfalse  
       Jan 26, 2021 via Android
    okhttp 直呼内行并表示你还是换个 HTTP 请求库吧
    yinzhili
        8
    yinzhili  
       Jan 26, 2021
    楼主需要补一补基础知识了
    Paaranoia
        9
    Paaranoia  
       Jan 26, 2021
    建议看看 okhttp 的文档
    scxiazi
        10
    scxiazi  
       Jan 26, 2021
    这打印的是对象
    amok
        11
    amok  
       Jan 26, 2021
    应该只是打印的问题,看看打印的代码是怎么写的,是否打印的 toString ?这里应该用拦截器打印 http 报文。
    Vegetable
        12
    Vegetable  
       Jan 26, 2021   ❤️ 2
    还建议看 okhttp 文档呢?这显然是需要重学 java 啊
    clf
        13
    clf  
       Jan 26, 2021
    这是 toString 出来的结果吧。看看有没有实体类自己输出 jsonStr 的方法。
    unco020511
        14
    unco020511  
       Jan 26, 2021
    你这是对象的 toSting(),不是 json
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1338 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 466ea39e · 49ms · UTC 17:11 · PVG 01:11 · LAX 10:11 · JFK 13:11
    ♥ Do have faith in what you're doing.