我有一个用例可以为其中一个字段启用自定义序列化。我正在尝试使用下面的代码片段来实现相同的功能。
@JsonSerialize(using = CustomSerializer.class)
private CustomDTO customDto;
错误说:
java: Annotation @JsonSerialize specifies attribute 'contentUsing'. Currently supported attributes include: [as]
还有其他替代方法在 micronaut 中引入自定义序列化吗?
具体场景: 需要在cosmos db read中引入自定义序列化器/反序列化器。 Azure Cosmos 使用 Jackson 来实现同样的目的。这里需要引入自定义序列化器。但似乎 micronaut 不支持
using
属性? ()
@JsonSerialize(using = CustomSerializer.class)
private CustomDTO customDto;
我假设您使用的是 Micronaut Serde,它没有实现 Jackson 提供的所有功能。您可以实施global customerDTO Serde。
@Singleton
public class CustomerDTOSerde implements Serde<CustomerDTO> {
@Override
public @Nullable CustomerDTO deserialize(
@NonNull Decoder outerDecoder,
@NonNull DecoderContext context,
@NonNull Argument<? super CustomerDTO> type)
throws IOException {
try (Decoder innerDecoder = outerDecoder.decodeObject(type)) {
String key = innerDecoder.decodeKey();
String fieldA = null
while (key != null) {
if (Objects.equals("fieldA2, key)) {
fieldA = innerDecoder.decodeString();
} else {
throw new IllegalArgumentException("Unknown key " + key);
}
key = innerDecoder.decodeKey();
}
}
return new CustomerDTO(fieldA);
}
@Override
public void serialize(
@NonNull Encoder encoder,
@NonNull EncoderContext context,
@NonNull Argument<? extends CustomerDTO> type,
@NonNull CustomerDTO value)
throws IOException {
try (Encoder objectEncoder = encoder.encodeObject(type)) {
objectEncoder.encodeKey("fieldA");
objectEncoder.encodeString(value.getFieldA());
//..
}
}
}
上面的示例假设您有一个
CustomerDTO
,其中包含单个属性 fieldA
。