Spring boot 2.4.1 RestController 返回的 JSON 格式不对

2021-01-19 15:41:43 +08:00
 NULL2020

自定义的返回结构体:

public class JsonResult<T> {
    private int code;
    private String message;
    private T data;
}

之前使用 Springboot 2.1.4,接口返回的格式为

{
  "code": 200,
  "message": "操作成功",
  "data": null
}

最近考虑升级下版本,测试 Springboot 2.4.1,返回格式为:

[
  "com.xxx.support.JsonResult",
  {
    "code": 200,
    "message": "操作成功",
    "data": [
      "java.util.ArrayList",
      []
    ]
  }
]

是要修改什么配置吗?看 release note 也没看到有相关的说明。

2291 次点击
所在节点    Java
10 条回复
chendy
2021-01-19 16:38:43 +08:00
目测自定义了序列化之类的,检查一下相关代码吧,默认配置不是这样的
JamesMackerel
2021-01-19 16:43:58 +08:00
这个看上去像是 Jackson 的 DefaultTyping,Spring 默认使用 Jackson 做序列化和反序列化,建议用这些关键字查一下。
arthas2234
2021-01-19 16:45:19 +08:00
我之前也遇到过这个问题
后面通过 git 对比发现是因为自己注入了 ObjectMapper ( com.fasterxml.jackson.databind.ObjectMapper )类引起的,现在改成通过 new 来创建
导致问题的根本原因还没找到,现在暂时还没时间排查
可能是因为自己注入后覆盖了 spring boot 的默认配置
0x666666
2021-01-19 16:45:36 +08:00
看样子 你这是做了序列化吧?检查你的代码里面有没有统一参数返回配置做了序列化的东西。
NULL2020
2021-01-19 16:54:38 +08:00
@chendy #1
@JamesMackerel #2
@arthas2234 #3
@0x666666 #4

两个版本都配置了 ObjectMapper bean,配置一样,测试过把 bean 注释掉,效果一样,即旧版本仍然是正常的,新版本仍然是不正常,就很奇怪。
jorneyr
2021-01-19 17:01:16 +08:00
从 Spring Boot starter 创建的网址 http://start.spring.io 下载了最小的 web 包,只写一个最简单的 Controller 返回一个普通对象,序列化没问题,应该是你的配置问题。
NULL2020
2021-01-19 17:35:10 +08:00
@jorneyr #6 我也试了下,真是正常的,但我也没配置啥啊。。
arthas2234
2021-01-19 17:37:47 +08:00
@NULL2020 八成是配置哪里冲突了,我之前也搞了好久,只能用 git 比较代码,一个一个的排查
NULL2020
2021-01-19 17:48:40 +08:00
@arthas2234 #8 找到原因了,看附言
arthas2234
2021-01-19 18:57:48 +08:00
@NULL2020 哈哈,解决了就好。你的问题和我的差不多,也是蛮诡异的,后面我找一下具体的原因

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/746331

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX