Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSON-B将UUID序列化为JSON中的规范十六进制字符串 UUID_Java_Json_Data Binding_Binding_Jsonb Api - Fatal编程技术网

Java 使用JSON-B将UUID序列化为JSON中的规范十六进制字符串 UUID

Java 使用JSON-B将UUID序列化为JSON中的规范十六进制字符串 UUID,java,json,data-binding,binding,jsonb-api,Java,Json,Data Binding,Binding,Jsonb Api,A是一个128位的值。在Java中由类表示 十六进制字符串 对于显示和序列化,其标准格式为36个字符的十六进制字符串,按五组排列,以连字符分隔:fd95cb46-8ec3-11e8-9eb6-529269fb1459 当使用Java标准XML和JSON API进行序列化时,我希望使用这个十六进制字符串。对XML有效,但对JSON无效。我没有对XML或JSON使用任何类型的注释。我的傻瓜对诺尔一无所知 XML=successJSON-B规范没有提到UUID类型,因此它是否提供现成的(反)序列化程序

A是一个128位的值。在Java中由类表示

十六进制字符串 对于显示和序列化,其标准格式为36个字符的十六进制字符串,按五组排列,以连字符分隔:
fd95cb46-8ec3-11e8-9eb6-529269fb1459

当使用Java标准XML和JSON API进行序列化时,我希望使用这个十六进制字符串。对XML有效,但对JSON无效。我没有对XML或JSON使用任何类型的注释。我的傻瓜对诺尔一无所知


XML=successJSON-B规范没有提到UUID类型,因此它是否提供现成的(反)序列化程序取决于实现。但是,如果您使用的是EclipseYasson(JSON-BRefImpl),那么默认情况下它确实提供了UUID(反)序列化程序。我不确定默认情况下其他JSON-B impl(如ApacheJohnzon)提供了什么

如果您使用的是Yasson,我建议您在上打开一个bug,因为这样应该可以工作


定制方式 如果您使用的JSON-B实现默认情况下不提供UUID适配器,则可以创建并注册您自己的类型适配器:

public static class MyUUIDAdapter implements JsonbAdapter<UUID, String> {

    @Override
    public String adaptToJson(UUID obj) throws Exception {
        return obj.toString();
    }

    @Override
    public UUID adaptFromJson(String obj) throws Exception {
        return UUID.fromString(obj);
    }

}
但是,如果您不控制
Jsonb
实例的实例化(例如,JAX-RS正在幕后进行),您可以在以下位置对要使用适配器的字段/方法进行注释:

public class Panel {
    @JsonbTypeAdapter(MyUUIDAdapter.class)
    public UUID id;
}

UUID
不是受支持的JSON-B类型,因此您可能必须实现自己的适配器或序列化程序/反序列化程序()。@Philipp UUID也不是XML已知的数据类型。只需调用
java.util.UUID::toString
即可完成任务。然而,JSON-B正在不遗余力地生成一对64位的数字。你可以称它为“另类”或“另类”,但从JSON-B的角度来看,
UUID
只是一个对象(类型未知),它有两个属性(long),哪个JSON-B序列化为您在输出中观察到的两个属性:
leastSignificantBits
mostssignificantbits
。顺便说一句,其他JSON映射程序也有同样的问题,例如,
GSON
public class Panel {
    @JsonbTypeAdapter(MyUUIDAdapter.class)
    public UUID id;
}