使用 Spring 和 Jackson JSON 将 java.io.Serializable 实例序列化为 JSON [重复]
Posted
技术标签:
【中文标题】使用 Spring 和 Jackson JSON 将 java.io.Serializable 实例序列化为 JSON [重复]【英文标题】:Serializing java.io.Serializable instance into JSON with Spring and Jackson JSON [duplicate] 【发布时间】:2014-02-07 12:55:28 【问题描述】:我从一些内部 API 中获得了 Serializable
的实例。 Serializable
实例实际上是Long
或String
等。有没有办法制作一个可以处理这种情况的DTO?使用private Serializable value;
JSON 以value:
结束。
更新
以下是相关代码的简化示例:
@Controller
public class SomeController
//...
public MyDto getInfo(Long id)
MyDto result = new MyDto();
Serializable obj = svc.getInfo(id);
// obj is either Long, or String, or one of few more fundamental Java types
result.setValue(obj);
return result;
public class MyDto
private Serializable value;
public void setValue(Serializable info)
this.value = value;
public Serializable getValue()
return value;
更新 2
我在这里找到了我的问题的答案:https://***.com/a/20494813/341065
【问题讨论】:
您可以使用自定义JsonDeserializer
来实现。
【参考方案1】:
请注意,Jackson 不会将java.io.Serializable
用于任何事情:添加它没有真正的价值。它会被忽略。
鉴于此,Jackson 将认为值等同于任何实际类型(对于序列化,即编写 JSON);或者,在阅读时,相当于java.lang.Object
。
如果您知道实际类型,您可以使用@JsonDeserialize(as=ActualType.class)
注释属性以给出提示。但如果实际值为String
s 和Long
s,则确实不需要。
【讨论】:
实际类型是少数 Java 类型之一,例如Long
或 String
。内部 API 返回Serializable
。我曾尝试在 DTO 中仅传递 private Object value;
,但在 JSON 中却一无所获。
Jackson 绝对应该将 Long 序列化为基本的 JSON 数字,将 String 序列化为 JSON String。但是您是按原样返回这些值,还是在某种包装对象中返回这些值?
查看更新后的问题。以上是关于使用 Spring 和 Jackson JSON 将 java.io.Serializable 实例序列化为 JSON [重复]的主要内容,如果未能解决你的问题,请参考以下文章
尝试通过 Spring Boot Rest 使用 Jackson 验证 JSON
在 Spring MVC 中使用 Jackson JSON 解析 JSON
Spring boot与Jackson ObjectMapper