【问题标题】:JSON loses attributes when deserializing [closed]JSON在反序列化时丢失属性[关闭]
【发布时间】:2021-11-23 18:59:47
【问题描述】:

客户端将 JSON 字符串传递给服务器,服务器将字符串反序列化为 Object,如下所示:

    @PostMapping("/web/UploadVideo")
    @ApiOperation("UploadVideo")
    public Result uploadVideoWB(HttpServletRequest request,
                                @RequestParam("sourceFile") MultipartFile sourceFile,
                                @RequestParam("videoBean") String videoBean) {
        Object object = request.getSession().getAttribute("UserId");
        if (object == null) {
            System.out.println("userId is null");
            return new Result(false, "UserId is null", null, null);
        } else {
            System.out.println("1. " + videoBean);
            VideoBean video = new Gson().fromJson(videoBean, VideoBean.class);
            video.setVideoUser((String) object);
            System.out.println("2. " + new Gson().toJson(video));
            return videoService.uploadVideo(sourceFile, new Gson().toJson(video));
        }
    }

控制台输出是这样的: 格式化它们:

{
    "objectId": "e3da789b-c514-2a55-c5f8-1882ae4863c9", 
    "videoId": "3be5e2c3-edf5-66d9-3c93-e3b4d2cdc35c", 
    "sha1": "92e343d96ca29ddf3b631f52f39e771fabff1c97", 
    "duration": 0, 
    "fileCategory": "bbe0e1d4c9bc4e9390871a52cd641c42", 
    "originalFileName": "WeChat_20211124011655.mp4", 
    "sourceFileName": "e1d26875-cd88-423d-568b-86b2cfeee7fc.mp4", 
    "coverFileName": "db0bc7a4-f900-0483-13c6-5d0227d10e27.png", 
    "thumbnailFileName": "5a34eb29-eaa2-a507-baab-97951c06926c.png", 
    "blurFileName": "17dceb9c-0c88-dcd1-cb4d-96e3c4f9a814.png", 
    "createTime": 1637692690492, 
    "videoUser": "", 
    "videoStatus": 1
}

{
    "objectId": "e3da789b-c514-2a55-c5f8-1882ae4863c9", 
    "videoId": "3be5e2c3-edf5-66d9-3c93-e3b4d2cdc35c", 
    "sha1": "92e343d96ca29ddf3b631f52f39e771fabff1c97", 
    "duration": 0, 
    "fileCategory": "bbe0e1d4c9bc4e9390871a52cd641c42", 
    "sourceFileName": "e1d26875-cd88-423d-568b-86b2cfeee7fc.mp4", 
    "coverFileName": "db0bc7a4-f900-0483-13c6-5d0227d10e27.png", 
    "thumbnailFileName": "5a34eb29-eaa2-a507-baab-97951c06926c.png", 
    "blurFileName": "17dceb9c-0c88-dcd1-cb4d-96e3c4f9a814.png", 
    "videoUser": "84f6e0d8d94348ccab981e364661a419", 
    "videoStatus": 1, 
    "createTime": 1637692690492
}

您可以看到 originalFileName 属性不见了! ! !

VideoBean.class:

public class VideoBean {
    private String objectId;
    private String videoId;
    private String sha1;
    private long duration;
    private String fileCategory;
    private String originalFilename;
    private String sourceFileName;
    private String coverFileName;
    private String thumbnailFileName;
    private String blurFileName;
    private String videoUser;
    private int videoStatus;
    private long createTime;

    getter/setter ...
}

为什么?

我应该怎么做才能使反序列化正常?

【问题讨论】:

  • 您在字段名称中有错字。将 private String originalFilename 更改为 private String originalFileName,名称为大写 N。

标签: java gson


【解决方案1】:

您的VideoBean 错误(您的班级中的originalFilename 与JSON 中的originalFileName,注意name 中的小写n)。使用以下一个:

public class VideoBean {
    private String objectId;
    private String videoId;
    private String sha1;
    private long duration;
    private String fileCategory;
    private String originalFileName;
    private String sourceFileName;
    private String coverFileName;
    private String thumbnailFileName;
    private String blurFileName;
    private String videoUser;
    private int videoStatus;
    private long createTime;

    getter/setter ...
}

【讨论】:

  • OMG,这个错误实在是太低级了,我在这个问题上浪费了一个小时,非常感谢
  • 你的回答太快了,5分钟后我接受不了
  • 请避免回答此类问题(由错别字引起)。他们不帮助任何人。相反,如果您发现错字并标记/投票关闭,请发表评论。如果帖子得到回复,则无法(自动)删除。
  • 好的,抱歉。以后我会发表评论。
猜你喜欢
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 1970-01-01
相关资源
最近更新 更多