如何使用 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 名称。
干杯
我希望能够将 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 名称。
干杯