我正在使用 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/