Java 我怎样才能让Jackson不把我的班级当作地图?

Java 我怎样才能让Jackson不把我的班级当作地图?,java,json,jackson,Java,Json,Jackson,我正在使用Jackson序列化一个实现Map的自定义类。但在幕后,它实际上是一个映射(这个类表示HTTP请求参数),我希望Jackson将其序列化,就像它是一个映射。我原以为该注释非常适合于此(我会注释一个返回内部映射的方法),但Jackson似乎忽略了它。如何禁用该类的映射样式处理,并将其序列化为POJO或通过JsonValue注释?您的最佳选择是自定义序列化程序/反序列化程序,因为Jackson无法知道您的映射是“伪造的”(即其签名错误) 但是如果@JsonValue不起作用,那听起来像是一

我正在使用Jackson序列化一个实现
Map
的自定义类。但在幕后,它实际上是一个
映射
(这个类表示HTTP请求参数),我希望Jackson将其序列化,就像它是一个
映射
。我原以为该注释非常适合于此(我会注释一个返回内部
映射的方法),但Jackson似乎忽略了它。如何禁用该类的映射样式处理,并将其序列化为POJO或通过
JsonValue
注释?

您的最佳选择是自定义序列化程序/反序列化程序,因为Jackson无法知道您的映射是“伪造的”(即其签名错误)


但是如果
@JsonValue
不起作用,那听起来像是一个bug。

您的最佳选择是自定义序列化器/反序列化器,因为Jackson无法知道您的地图是“伪造的”(即其签名错误)


但是如果
@JsonValue
不起作用,那听起来像是一个bug。

是的,我没有看过代码,但我的假设是
@JsonValue
检查只在Jackson确定类是类而不是类集合时发生。我已经让
@JsonValue
在其他上下文中正常工作,但是当类看起来像集合时,我认为它会被忽略。对,这是高层的正确假设。但理想情况下,代码应该检查@JsonValue注释,因为它是可用的:这是为枚举处理的。因此,我将看看这是否也适用于地图和集合。值得一提的是,Jackson 2.0.0已经修复了这一问题,因此@JsonValue最终应该适用于所有类型(包括地图和集合类型)。是的,我还没有看过代码,但我的假设是,
@JsonValue
检查只在Jackson确定类是类bean而不是类集合时发生。我已经让
@JsonValue
在其他上下文中正常工作,但是当类看起来像集合时,我认为它会被忽略。对,这是高层的正确假设。但理想情况下,代码应该检查@JsonValue注释,因为它是可用的:这是为枚举处理的。因此,我将看看这是否也适用于地图和集合。值得一提的是,Jackson 2.0.0已经修复了这一问题,因此@JsonValue最终应该适用于所有类型(包括地图和集合类型)。