如何使用 CORDA 将类型列入白名单以进行序列化

How to whitelist types for serialization with CORDA

我希望能够将 java.util.Date 传递给模型中的 CORDA API 端点

模特

public final class Message{
    public Date birthday;

    public Message(Date birthday) {
        this.birthday = birthday;
    }

    private Message() {
        // This is only here so the serializer can spin up a new instance.
    }

    public Date getBirthday() {
        return birthday;
    }
}

API

@Path("foo")
public final class FooApi {
    @PUT
    @Path("bar")
    @Produces(MediaType.APPLICATION_JSON)
    public Response putBar(Message m) {
        // Some logic here
        return Response.ok("Successful").build();
    }
}

问题是当我提交 Date 时,我得到这个:

Classjava.util.Dateisnotannotatedoronthewhitelist, socannotbeusedinserializationSerializationtrace: closeDate(com.template.messages.Message)

如何将 Date 列入白名单以进行序列化?

从 Corda 1 开始,你需要创建一个 class 来实现 SerializationWhitelist 接口。定义为:

interface SerializationWhitelist {
    val whitelist: List<Class<*>>
}

一个示例实现可能是:

class Plugin : SerializationWhitelist {
    override val whitelist: List<Class<*>> get() = listOf(
        TransactionBuilder::class.java
    )
}

META-INF.services 中,您需要一个名为 net.corda.core.serialization.SerializationWhitelist 的文件,在其中放置实现 SerializationWhitelist 的 class 的完全限定 class 名称。

干杯