UUID
通用唯一标识符 (UUID)是一个 128 位的值。在 Java 中由java.util.UUID
类表示。
十六进制字符串
为了显示和序列化,它被规范地格式化为 36 个字符的十六进制字符串,以连字符分隔的五组排列。例如:fd95cb46-8ec3-11e8-9eb6-529269fb1459
当使用 Java 标准的 XML 和 JSON API 进行序列化时,我期望这个十六进制字符串。适用于 XML,但不适用于 JSON。我没有为 XML 或 JSON 使用任何类型的注释。我的简单POJO对XML和JSON一无所知。
XML = 成功
当我使用JSR 222: JavaTM Architecture for XML Binding (JAXB) 2.0的标准 XML 绑定框架生成 XML 时,成功了。我按预期得到了十六进制字符串。请参阅此片段的最后一个元素:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<panel>
<connected>3.4kVA</connected>
<fedFrom>PANEL 'EHE1' & ATS-EM</fedFrom>
<grounding>ground bus</grounding>
<id>89d14b92-35ae-4c0c-b61d-ea8dbdeb324b</id>
JSON = 失败
当我通过JSR 367panel
的标准 JSON 绑定框架运行同一对象时:JavaTM API for JSON Binding (JSON-B)失败。我得到的是数字,而不是预期的十六进制字符串。
{"connected":"3.4kVA","fedFrom":"PANEL 'EHE1' & ATS-EM","grounding":"ground bus","id":{"leastSignificantBits":-5323841289984462261,"mostSignificantBits":-8515942329042973684},
如果滚动,您将看到命名的 UUIDid
显示为一对数字而不是十六进制字符串:
"id":{"leastSignificantBits":-5323841289984462261,"mostSignificantBits":-8515942329042973684}
有没有办法让 JSON 绑定像 XML 绑定一样工作?我想要十六进制字符串,而不是一对 64 位数字。
当然,这个编组的值在解组时应该可以工作,重新水合到 Java 对象中。