java - 当对象实现可序列化时,ReSTLet/Jackson 的工作方式有所不同

标签 java jackson restlet

我正在使用 ReSTLet 和 Jackson 转换器发送带有一些原始字段的对象。到目前为止,效果很好。 但后来我需要我的对象实现 Serialized,因为我需要将它存储在 GAE 的内存缓存中。 由于某种原因 - 当类实现 Serialized 时,事情就会停止工作。

ReSTLet 发送了与之前不同的字符串表示形式,我什至无法在服务器中打印该字符串。我尝试逐个字符地打印其字节值,第一个数字是:

0xfffd 0xfffd 0x0000 0x0005 0x0073 0x0072

非常感谢!

最佳答案

发生的情况是,您得到的结果是将 DefaultConverter 应用到返回值而不是 JacksonConverter。 DefaultConverter 将 Serialized 对象转换为 ObjectRepresentation,后者是二进制表示形式(对象的序列化形式)。在没有请求特定媒体类型的情况下,转换器逻辑将 Serialized 视为可以同等地转换为 ObjectRepresentation 或 JacksonRepresentation,并且由于转换器的排序方式,它选择前者。

有几种方法可以解决这个问题。最简单的方法是在请求中显式指定所需的媒体类型 (MediaType.APPLICATION_JSON)。

更可靠的解决方案是将 JacksonConverter 替换为您自己的自定义版本,该版本对 null Variant 的评分高于当前值 0.5。如果您想覆盖当前 JacksonRepresentation 为每次转换创建新 ObjectMapper 的行为,或者您想使用 Jackson 2.0,您无论如何都需要执行此操作。在 ReSTLet 讨论列表中搜索我关于如何实现此目的的帖子。 (tpeierls)

这种行为很可能已在最近的版本中得到修复,并且我知道与此相关的问题的工作正在进行中,因此在采取任何行动之前,请在问题跟踪器中搜索 JacksonConverter。

关于java - 当对象实现可序列化时,ReSTLet/Jackson 的工作方式有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10873455/

相关文章:

java - 如何比较java中各自包含原始类型和对象集合的两个对象?

java - 内核可以用汇编语言以外的语言编写吗?

java - Intellij IDEA : Spark code running results in java. lang.VerifyError

java - 匿名类中 "this"的值与 lambda 表达式

java - ObjectMapper-无法反序列化实例 java.lang.Double

java - 由于输入结束 jackson 解析器,没有要映射的内容

java - 浏览器发送 OPTIONS 而不是 PUT 或 DELETE

java - jackson @JsonPropertyOrder 被忽略

java - Jackson:使用单个条目将字符串序列化/反序列化为数组

java - 如何使用 JAX-RS 提供静态内容?